我想用类创建一个链表。我有两个类,一个是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;
};
感谢您的帮助!
答案 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
),则实际上根本不需要遍历整个列表。然后你可以直接访问它,只需追加和更新。