0

所以,我试图在 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;
        }
    }
};

我不知道出了什么问题...任何帮助将不胜感激。

4

2 回答 2

2
void push(node new)

您不必复制对象,如下所示:

void push(node& new)

否则,您将获取在函数末尾删除的对象的地址

于 2012-05-26T23:35:18.653 回答
0

至少在我看来,你有一些在某种程度上是错误的。

首先,head不应该真的是node- 它应该是node *. 至少从外观上看,你使用它的只是它的next指针,所以你不妨把它变成一个指针并完成它。

其次,要在列表的开头插入新项目,您实际上不需要检查列表的头部是否为空指针。

第三,虽然@lezebulon 建议使用对节点的引用起作用,但我认为在这种情况下这并不是最好的方法。与其让用户传递指向节点的指针或引用,他们实际上应该只传递一个数据项,并且您的链表类应该分配一个节点来保存列表中的该项。

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);
    }
};
于 2012-05-27T00:09:43.897 回答