2014-02-21 141 views
-1

我正在構建一個簡單的linked listdisplay()add_at_end()函數。以下是我的代碼鏈接列表錯誤 - 無限循環

#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()功能while循環,我不遞增temp變量。所以我將代碼更改爲

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

你也應該解決您的add_at_end功能:

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

    tmp2->next = temp;