对于家庭作业,我必须创建一个由多个士兵组成的节点并打印 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
这是输出 如果我尝试重新排列圆圈功能,我会得到一个分段转储
最佳答案
right now if n is 3 instead of 123 i get 012
我想这取决于 create_soldier(i)
对 i
中的值做了什么,但请注意循环使用 i
中的值0 到 n-1,而不是 1 到 n。
也许您应该将 for
循环的起始值和结束值更改为:
for (int i=1; i<=n; i++)
i get a segmentation dump if I try my rearrange circle function
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
将始终为真(导致无限循环)除非使用空指针调用 rearrange_circle()
(在这种情况下,前面的 next = head->next;
是空指针解引用。
if(temp != NULL )
head2 = temp->prev;
^^^ 这是在函数的末尾,head2
现在没有用到,所以上面的语句显得有点无意义。
}
我不知道 rearrange_circle()
应该做什么,所以我没有建议如何修复它。
关于c - 为什么打印 012 而不是 123,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58454675/