[英]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.