在双圆形链表的末尾插入节点

时间:2013-09-12 15:55:14

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

我正在编写一个程序,在双循环链表上执行各种操作。所有其他功能都运行良好,但在努力之后,我无法理解为什么我的程序在执行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函数,请帮帮我..我是初学者......

2 个答案:

答案 0 :(得分:3)

您在此处声明了未初始化的指针p

node*temp,*p;

你在这里取消引用它,尽管没有把它设置为任何值:

while(p->next!=start)

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

请注意,如果您有一个双向链接循环列表,那么您不需要循环来查找最后一个节点:最后一个节点是第一个节点之前的节点,即start->pre

答案 1 :(得分:1)

您没有初始化节点指针p

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