链表覆盖前一个值



我想创建一个带有类的链表。我有两个类,一个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;
    }
}

My class 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# include"LinkedNode.h"使用命名空间std;
class LinkedList
{
public:
    LinkedList();
    ~LinkedList();
    void PrintList();
    void InsertAtend(int data);
    void PrintList() const;
private:
    LinkedNode* _header;
};

感谢您的帮助

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

tmp是最后一个节点,所以如果不想删除它,就不应该在其中写入值data。您应该将它链接到新节点,您将其命名为node

不是

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

你应该写

tmp->setNext(node)

在循环结束时,tmp是当前列表中的最后一个节点。由于希望在最后一个节点之后添加新的node,因此需要执行

tmp->setNext(node);

来附加它(并且不设置数据,因为数据已经设置为新的node)。

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

相关内容

  • 没有找到相关文章

最新更新