Вставка узла в конце двойного кругового связанного списка

Я пишу программу для выполнения различных операций над двойным круговым связанным списком. Все остальные функции работают нормально, но после тяжелых попыток я почему-то не могу понять, почему моя программа завершает работу, когда я выполняю функцию 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 .. Я новичок …

1

Решение

У вас есть неинициализированный указатель p здесь заявлено:

node*temp,*p;

И вы разыменовываете это здесь, несмотря на то, что не установили его в любое значение:

while(p->next!=start)

Возможно, вы хотите добавить p=start; чтобы это началось с первого узла.

Обратите внимание, что если у вас есть двойной связанный круговой список, то вам не нужен цикл для поиска последнего узла: последний узел — это тот, который находится перед первым узлом, т.е. start->pre,

3

Другие решения

Вы не инициализируете указатель узла p!

Вам нужно установить p в начальный узел списка до того, как вы достигнете цикла while.

1

По вопросам рекламы [email protected]