所以,我试图用C ++实现一个简单的链表,但是我的类的push方法有问题。基本上,当我将第一个节点添加到列表中时,一切都很顺利;但是,当我添加第二个节点时,它最终指向自身(即secondNode.next ==& secondNode)。
class linkedList
{
public:
node head;
linkedList()
{
head.next = NULL;
}
void push(node new)
{
if(head.next == NULL)
{
head.next = &new;
new.next = NULL;
}
else
{
new.next = head.next;
head.next = &new;
}
}
};
我无法弄清楚出了什么问题......非常感谢任何帮助。
答案 0 :(得分:2)
void push(node new)
您必须不制作该对象的副本,如下所示:
void push(node& new)
否则您将获取在函数末尾删除的对象的地址
答案 1 :(得分:0)
至少在我看来,你有一些事情在某种程度上是错误的。
首先,head
不应该是node
- 它应该是node *
。至少从事物的外观来看,你所使用的只是它的next
指针,所以你不妨把它作为一个指针并完成它。
其次,要在列表的开头插入新项目,您实际上不需要检查列表的头部是否为空指针。
第三,虽然@ lezebulon建议使用节点的引用,但我不认为在这种情况下它真的是最好的方式。他们不应该让用户传递指针或对节点的引用,而应该传递一个数据项,而您的链表类应该分配一个节点来保存列表中的该项。 / p>
template <class T>
class linked_list {
class node {
T item;
node *next;
public:
node(T const &data, node *next_node) : item(data), next(next_node) {}
};
node *head;
public:
linked_list() : head(NULL) {}
void push(T const &data) {
head = new node(data, head);
}
};