1

我正在编写一个程序来对双循环链表执行各种操作。所有其他功能都工作正常,但经过努力,我不知何故无法弄清楚为什么我的程序在执行 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 功能..我是初学者...

4

2 回答 2

3

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

node*temp,*p;

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

while(p->next!=start)

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

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

于 2013-09-12T15:59:53.903 回答
1

您没有初始化节点指针p

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

于 2013-09-12T16:02:09.053 回答