【发布时间】:2019-10-18 16:16:59
【问题描述】:
对于家庭作业,我必须创建一个包含多个士兵的节点并打印 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
这是输出 如果我尝试重新排列圆圈功能,我会得到一个分段转储
【问题讨论】:
-
Spongebob在家里时是什么?它可能不是黄色海绵。 -
在
rearrange_circle()中,head2是NULL,但您在dowhile循环中取消引用它。 -
我建议:从头开始。创建一个新程序,仅添加查看问题所需的内容。对函数和变量使用简单的描述性名称——不要复制您在现有代码中使用的名称。
标签: c for-loop pointers doubly-linked-list circular-list