C语言 为什么它打印 012 而不是 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("checkmaten");
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

这是输出 如果我尝试重新排列圆函数,我会得到一个分段转储

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

我想这取决于create_soldier(i)如何处理i中的值,但请注意,循环使用从 0 到 n-1 的i值,而不是 1 到 n。

也许您应该将for循环的开始值和结束值更改为:

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

如果我尝试重新排列圆圈功能,我会得到一个分段转储

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

^^^ 您正在取消引用空指针head2

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

^^^head!=NULL将始终为 true(导致无限循环(,除非rearrange_circle()是使用 null 指针调用的(在这种情况下,前一个next = head->next;是空指针取消引用。

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

^^^ 这是在函数的末尾,现在不使用head2,所以上面的陈述似乎有点毫无意义。

}

我不知道rearrange_circle()应该做什么,所以我没有建议如何解决它。

相关内容

  • 没有找到相关文章

最新更新