好的,我知道这是一个非常简单易懂的问题,但由于某种原因,我无法获得链接列表。可能只是因为我真的很累,因为我之前已经完成了一百万次。将我的程序简化为最简单的实现,仍然无法正常工作。
非常基本的实现,只需要制作一个整数的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;
}
}
答案 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
的内容。