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

标签 c for-loop pointers doubly-linked-list circular-list

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

相关文章:

c++ - 将指针设置为 NULL 会影响您指向的原始项目吗?

c++ - 我可以期望我从文字常量设置的浮点变量值在分配给其他变量后不变吗?

c - C 程序中需要左值作为一元 '&' 操作数

swift - 使 Completionhandler 在 For 循环中工作以获取图像

javascript - 如何迭代数组中的所有数字并添加或减去它们以使它们达到预定值

c++ - For循环跳过getline C++

c - 方法的堆栈帧被删除但局部变量值仍然可以访问?

c - 数组连接函数返回乱码。

c - MPI 及其全局变量

c - C中的头文件有什么意义?