gpt4 book ai didi

c - 为什么打印 012 而不是 123

转载 作者:太空宇宙 更新时间:2023-11-04 04:09:59 25 4
gpt4 key购买 nike

对于家庭作业,我必须创建一个由多个士兵组成的节点并打印 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com