打印单向链表

Printing the singly linked list

本文关键字:链表 打印      更新时间:2023-10-16

我是编程新手 在这里,我编写了一个使用链表接受和显示值的代码。 但是,代码采用所有值,但仅显示最后一个值 这是代码

#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 listn";
l1.display();
return 0;
}

输入:41
2 3
4
显示
列表
值:4

我想知道出了什么问题...

更改以下内容:

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;

问题出在 else 块中的最后 2 行。 您将覆盖该值并仅维护列表类中的单个模式。这就是原因,只显示最后一个值。 取代

temp->value = p->value;
temp->next = NULL;

temp->next = p;