2013-09-12 4 views
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 ..I'm начинающему ...

+1

При выполнении подобных действий лучше всего сделать связанный список в бумаге и выполнить операцию вручную, шаг за шагом. – Manu343726

+0

О, да, я буду помнить об этом. Благодарю . :) –

ответ

3

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

node*temp,*p; 

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

while(p->next!=start) 

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

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

+0

Ну ладно. Большое спасибо :-) Это действительно помогло. –

1

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

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

+0

Восклицания не нужны :) Будьте терпеливы с OP, все терпят неудачу, и каждый был нубом, когда начинал с чего-то (программирование структуры данных в этом случае) – Manu343726

+1

Я не был нетерпелив, просто привлекая к нему внимание;) – Paddyd

Смежные вопросы