Я пишу программу для выполнения различных операций над двойным круговым связанным списком. Все остальные функции работают нормально, но после тяжелых попыток я почему-то не могу понять, почему моя программа завершает работу, когда я выполняю функцию 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 .. Я новичок …
У вас есть неинициализированный указатель p
здесь заявлено:
node*temp,*p;
И вы разыменовываете это здесь, несмотря на то, что не установили его в любое значение:
while(p->next!=start)
Возможно, вы хотите добавить p=start;
чтобы это началось с первого узла.
Обратите внимание, что если у вас есть двойной связанный круговой список, то вам не нужен цикл для поиска последнего узла: последний узел — это тот, который находится перед первым узлом, т.е. start->pre
,
Вы не инициализируете указатель узла p
!
Вам нужно установить p в начальный узел списка до того, как вы достигнете цикла while.