打印单链表

Printing the singly linked list

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

#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

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

改变这个:

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 块中的最后两行。 您正在覆盖该值并仅维护列表 class 中的单一模式。这就是原因,只显示最后一个值。 替换

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

temp->next = p;