2014-02-21 2 views
-1

Я строю простой linked list с функциями display() и add_at_end(). Ниже мой кодСвязанный список Error-Infinite Loop

#include<stdio.h> 
#include<iostream> 

using namespace std; 

typedef struct node{ 
    int num; 
    struct node *next; 

}n; 
n* head; 
class ll{ 
public: 
ll(); 
~ll(); 

void display(); 
void add_at_end(int n); 
//void add_at_beginning(int n); 
//int count(); 
//void delete_num(int n); 
}; 
ll::ll(){ 

    head=NULL; 
} 
ll::~ll(){ 
    if(head!=NULL) 
    { 
     n *temp; 
     while(head!=NULL) 
     { 
      temp=head->next; 
      delete head; 
      head=temp; 
     } 
    } 

} 

void ll::display(){ 
if(head==NULL) 
    cout<<"There is nothing to display in the list"; 
else 
{ 
    n *temp; 
    temp=head; 
    while(temp!=NULL) 
     {cout<<temp->num;} 
}} 
void ll::add_at_end(int number) 
{ 
    n *temp=new n; 
    temp->num=number; 
    temp->next=NULL; 
    if(head==NULL) 
     head=temp; 
    else 
    { 

     n *tmp2; 
     tmp2=head; 
     while(tmp2!=NULL) 
     { tmp2=tmp2->next;} 
     tmp2=temp; 
    } 

} 
     int main(){ 
     ll* fll=new ll(); 
     fll->add_at_end(54); 
     fll->display(); 
    return 0; 
} 

Все остальное это хорошо, но когда я запускаю код, я получаю бесконечный цикл, в котором 54 продолжает получать распечатанный снова и снова. Где я ошибаюсь? В функции display() или add_at_end()?

+1

Вы могли бы хотеть, чтобы присмотреться к этой петле в вашем 'add_at_end' функции. –

+2

Помимо этого, я рекомендую вам пройти через код, строка за строкой, в отладчике. Это может помочь вам сузить проблему до определенной функции и, возможно, понять ее сами. –

ответ

2

Бесконечный цикл происходит на дисплее. Вы не продвигались указатель временного

0

Найдено моя ошибка

В функции display() время цикла я не увеличиваем temp переменной. Поэтому я изменил код на

while(temp!=NULL) 
     {cout<<temp->num; 
     temp=temp->next;} 
0

вы также должны исправить функцию add_at_end:

while(tmp2->next != NULL) 
    { 
     tmp2 = tmp2->next; 
    } 

    tmp2->next = temp; 
Смежные вопросы