簡體   English   中英

為什么打印 012 而不是 123

[英]Why does it print 012 not 123

對於家庭作業,我必須創建一個包含多個士兵的節點並打印 n 位數字,即 5,打印 1 到 5,然后打印 5 到 1

現在如果 n 是 3 而不是 123 我得到 012

我試過修復指針和我的 for 循環......

Spongebob* create_reverse_circle(int n)
{

   Spongebob *p= NULL;
   for (int i=0; i<n; i++)
   {
       //everytime a soldier is created, it goes in beg. of 
       push(&p,create_soldier(i));
   }
   printf("checkmate\n");
   return p;
}

void push(Spongebob **p, Spongebob* temp)
{
    if(*p==NULL)
    {
        temp->next = temp->prev = temp;
        *p = temp;
         return;
    }

    Spongebob *last = (*p)->prev;
    temp->next = *p;
    (*p)->prev = temp;
    temp->prev = last;
    last->next =temp;
}


Spongebob* rearrange_circle(Spongebob* head)
{
    Spongebob* temp = head;
    Spongebob* head2 = NULL;
    Spongebob* next = NULL;

    do
    {
        next = head->next;
        temp->next = head2->next;
        head2->next = temp;
        temp = head2->prev;
    }
    while(head!= NULL);

    if(temp != NULL ) 
        head2 = temp->prev; 

}

創建海綿寶寶0
創建海綿寶寶1
創建海綿寶寶2
將死
0 1 2

這是 output,如果我嘗試重新排列圈子 function,我會得到分段轉儲

現在如果 n 是 3 而不是 123 我得到 012

我想這取決於create_soldier(i)i中的值的作用,但請注意循環使用從 0 到 n-1 的i值,而不是從 1 到 n。

也許您應該將for循環的開始和結束值更改為:

   for (int i=1; i<=n; i++)

如果我嘗試重新排列圓圈 function,我會得到分段轉儲

Spongebob* rearrange_circle(Spongebob* head)
{
    Spongebob* temp = head;
    Spongebob* head2 = NULL;
    Spongebob* next = NULL;

    do
    {
        next = head->next;
        temp->next = head2->next;

^^^ 您正在取消引用 null 指針head2

        head2->next = temp;
        temp = head2->prev;
    }
    while(head!= NULL);

^^^ head!=NULL將始終為真(導致無限循環),除非使用 null 指針調用了 rerange_circle rearrange_circle() (在這種情況下,前next = head->next;是一個 null 指針取消引用。

    if(temp != NULL ) 
        head2 = temp->prev; 

^^^ 這是function的末尾, head2現在不用了,所以上面的說法好像有點沒有意義。

}

我不知道rearrange_circle()應該做什么,所以我沒有建議如何解決它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM