打印单链表

时间:2017-08-22 17:04:00

标签: c++ 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

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

2 个答案:

答案 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;