【问题标题】:Inserting node at the end of a double, circular linked list在双循环链表的末尾插入节点
【发布时间】:2013-09-12 15:55:13
【问题描述】:

我正在编写一个程序来对双循环链表执行各种操作。所有其他功能都工作正常,但经过努力,我不知何故无法弄清楚为什么我的程序在执行 insert_end() 函数时会终止。功能是:

    void list::insert_end()
     {  int data;
         node*temp,*p;
         if(start==NULL)
        cout<<"CREATE list first!:"<<endl;
        else
        { cout<<"enter data to enter in a node after the last node:"<<endl;
          cin>>data;
          temp=new node(data);
          while(p->next!=start)
         { p=p->next;
         } // now p points to last node of doubly,circular list!! i.e. the linked list is traversed till p's next pointer points to start
           temp->pre=p;
          temp->next=p->next;
          p->next->pre=temp;
          p->next=temp;
          display();
        }
      }

这是一个菜单驱动程序。

请帮助我了解 insert_end 功能..我是初学者...

【问题讨论】:

  • 在做这种事情的时候,最好把链表画在纸上,然后手工操作,一步一步来。
  • 哦,是的,我会记住这一点。谢谢 。 :)

标签: c++ doubly-linked-list circular-list


【解决方案1】:

你在这里声明了一个未初始化的指针p

node*temp,*p;

尽管没有将其设置为任何值,但您在此处取消引用它:

while(p->next!=start)

也许您想添加p=start; 让它从第一个节点开始。

注意,如果你有一个双向循环列表,那么你不需要循环来找到最后一个节点:最后一个节点是第一个节点之前的那个,即start-&gt;pre

【讨论】:

    【解决方案2】:

    你没有初始化节点指针p

    在到达 while 循环之前,您需要将 p 设置为列表的开始节点。

    【讨论】:

    • 感叹号是不必要的 :) 对 OP 要有耐心,每个人都失败了,每个人在开始时都是菜鸟(在这种情况下是数据结构编程)
    • 我不是不耐烦,只是引起了人们的注意;)
    猜你喜欢
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 2011-08-13
    • 2020-11-15
    • 2021-05-23
    • 2015-02-08
    相关资源
    最近更新 更多