我是编程的新手 在这里,我编写了一个使用链表接受和显示值的代码。 但是,代码会获取所有值,但仅显示最后一个值 这是代码
#include <iostream>
using namespace std;
struct node {
int value;
node* next;
};
class llist {
public:
void create();
void display();
node* head = NULL;
};
void llist::create()
{
struct node* temp;
temp = NULL;
struct node* p;
p = new struct node;
cin >> p->value;
if (head == NULL) {
head = p;
}
else {
temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->value = p->value;
temp->next = NULL;
}
}
void llist::display()
{
struct node* temp = head;
while (temp != NULL) {
cout << "VALUE:" << temp->value << endl;
temp = temp->next;
}
}
int main()
{
int n, i;
llist l1;
cin >> n;
for (i = 0; i < n; i++)
l1.create();
cout << "Displaying list\n";
l1.display();
return 0;
}
输入:
4
1
2
3
4
显示清单
VALUE:4
我想知道出了什么问题......
答案 0 :(得分:3)
改变这个:
else {
temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->value = p->value;
temp->next = NULL;
}
到此:
else {
temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = p;
}
在链表的末尾插入新元素时,您会找到while循环中的最后一个元素并将其放在temp
变量中。然后,将其next
值分配给新的p
元素。你以前的方式,你只是覆盖了最后一个元素的整数。这就是为什么当你打印你的清单时,你只得到你输入的最后一个号码。
此外,在创建新元素p
时,请务必将其next
值初始化为NULL
:
p = new struct node;
p->next = NULL;
答案 1 :(得分:0)
问题在于else块中的最后两行。 您正在覆盖该值并仅在列表类中维护单一模式。这就是原因,只显示最后一个值。 替换
temp->value = p->value;
temp->next = NULL;
使用
temp->next = p;