链接列表类

时间:2012-11-11 12:28:48

标签: c++ linked-list

好的,我知道这是一个非常简单易懂的问题,但由于某种原因,我无法获得链接列表。可能只是因为我真的很累,因为我之前已经完成了一百万次。将我的程序简化为最简单的实现,仍然无法正常工作。

非常基本的实现,只需要制作一个整数的LL,这是我以前做过一百万次的事情,但无论出于什么原因它都不会超越头部。

的main.cpp

#include <iostream>
#include "ll.h"
using namespace std;

int main()
{
    int x;
    list ll;
    int i =0;


    while(i == 0)
    {
    cout << "Enter a value to add to the LL ";
    cin >> x;

    ll.add(x);
    ll.display();
    }

return 0;
}

ll.h

struct node
{
    int val;
    node * next;
};

class list
{
    public:
    list();

    void add(int);
    void display();
    node * head;
};

ll.cpp

#include <iostream>
#include "ll.h"
using namespace std;

list::list()
{
    head = NULL;
}

void list::add(int x)
{
    if(!head)
    {
        cout << "First  " << endl;
        head = new node;
        head->val = x;
        head->next = NULL;
    }
    else
    {
        node * current = head;
        while (current)
            current = current->next;

        current = new node;
        current->val = x;
        current->next = NULL;

    }
}

void list::display()
{
    node * current = head;

    while(current)
    {
        cout << current->val << endl;
        current = current->next;
    }
}

2 个答案:

答案 0 :(得分:2)

似乎您想要附加到列表中。在这种情况下,循环条件不应该是

while (current)

while (current->next)

确保最初是非NULL(用于检查`head)。

实际上,设置新节点的逻辑也不太对。您可能希望add()的第二个分支看起来像这样:

while (current->next) {
    current = current->next;
}
current->next = new node(x);

...使用node的合适构造函数:

node::node(int x): val(x), next() {}

答案 1 :(得分:1)

除了Dietmar的回答,你还有一个不合适的while循环:

while ( i == 0 ) {
     ...
}

在for循环的主体中,i永远不会改变,导致它无限循环。我不完全确定你想要使用i的内容。