在链表创建循环中插入

时间:2012-05-26 23:31:24

标签: c++

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

我无法弄清楚出了什么问题......非常感谢任何帮助。

2 个答案:

答案 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);
    }
};