【问题标题】:Why does it print 012 not 123为什么打印 012 而不是 123
【发布时间】: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() 中,head2NULL,但您在 do while 循环中取消引用它。
  • 我建议:从头开始。创建一个新程序,仅添加查看问题所需的内容。对函数和变量使用简单的描述性名称——不要复制您在现有代码中使用的名称。

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


【解决方案1】:

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

我猜这取决于create_soldier(i)i 中的值的作用,但请注意循环使用的i 值从0 到n-1,而不是从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 将始终为真(导致无限循环),除非使用空指针调用 rearrange_circle()(在这种情况下,之前的 next = head-&gt;next; 是空指针取消引用。

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

^^^ 这是在函数的最后,而head2现在没有用到,所以上面的说法似乎有点无意义。

}

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

【讨论】:

  • 非常感谢,我的 123 现在已经修好了。重新排列的圆圈应将数字 123 反转为 321
猜你喜欢
  • 2014-03-10
  • 2016-10-17
  • 2017-08-29
  • 2021-09-26
  • 2013-09-23
  • 2018-11-28
  • 1970-01-01
  • 2016-05-13
  • 2016-06-07
相关资源
最近更新 更多