链表错误 - 无限循环

时间:2014-02-21 15:21:05

标签: c++ linked-list

我正在使用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()函数?

3 个答案:

答案 0 :(得分:2)

无限循环发生在显示屏上。你没有推进临时指针

答案 1 :(得分:0)

发现我的错误

display()函数while循环中,我没有增加temp变量。所以我将代码更改为

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

答案 2 :(得分:0)

你还应该修复你的add_at_end函数:

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

    tmp2->next = temp;