链接列表会覆盖以前的值

时间:2016-10-27 16:06:13

标签: c++ linked-list

我想用类创建一个链表。我有两个类,一个是LinkedList,另一个是LinkedNode。我的问题是我的函数InsertAtEnd总是删除当前节点。因此,当我想要打印我的链表时,我看不到任何东西。 我知道多谢调试器,在函数InsertAtEnd中,我们不进入while循环,这就是问题所在。但经过几次尝试,我无法解决我的问题。

这是我的代码:

void LinkedList::InsertAtend(int data)
{
    LinkedNode* node = new LinkedNode();
    node->setData(data); node->setNext(nullptr);

    LinkedNode* tmp = _header;
    if (tmp != NULL)
    {   
        while (tmp->getNext() != nullptr)
        {
            tmp = tmp->getNext();
        }
        tmp->setData(data);
        tmp->setNext(nullptr);
    }
    else
    {
        _header = node;
    }
}

我的班级LinkedNode:

class LinkedNode
{
public:
    LinkedNode();
    ~LinkedNode();
    void setData(int data);
    void setNext(LinkedNode* next);

    int getData() const;
    LinkedNode* getNext() const;

private:
    int _data;
    LinkedNode* _next;
};

我的班级LinkedList:     #pragma一次     #包括     #include“LinkedNode.h”     使用namespace std;

class LinkedList
{
public:
    LinkedList();
    ~LinkedList();
    void PrintList();
    void InsertAtend(int data);
    void PrintList() const;

private:
    LinkedNode* _header;
};

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

tmp->setData(data); 您的tmp不是您尝试添加的节点,而是列表中的最后一个节点。

答案 1 :(得分:1)

tmp是最后一个节点,因此如果您不想删除它,则不应在其中写入值data。您应该将其与名为node的新节点链接。

而不是

tmp->setData(data);
tmp->setNext(nullptr);

你应该写

tmp->setNext(node)

答案 2 :(得分:0)

在循环结束时,tmp是当前列表中的最后一个节点。如果要在最后一个节点之后添加新的node,则需要

tmp->setNext(node);

追加它(并没有设置数据,因为数据已经设置为新的node)。

另请注意,如果将另一个成员变量保留到列表的当前末尾(_tail),则实际上根本不需要遍历整个列表。然后你可以直接访问它,只需追加和更新。