将节点添加到链接列表的末尾 - C ++

时间:2014-09-11 07:17:50

标签: c++ templates linked-list

我无法让这个程序将节点附加到链表的末尾。我知道它必须对“addBack”函数做一些事情,因为“addFront”函数工作得很好。我认为这应该足够了,但如果需要更多的代码,只需要问,你们就会收到。

template <typename E>
void SLinkedList<E>::addBack(const E& e)
{
    E *temp = head;
    while (temp -> next != NULL)
        temp = temp -> next;
    SNode<E> * v = new SNode<E>;
    temp -> next = v;
    v -> elem = e;
    v -> next = NULL;
}

1 个答案:

答案 0 :(得分:1)

此代码存在两个问题。首先,头部不是类型E的指针,而是它是SNode类型的指针。 当添加第一个项目时,2个列表可能为空(头部将为NULL)。所以你需要单独处理这个案例。 以下代码应该有效:

template <typename E>
void SLinkedList<E>::addBack(const E& e)
{
    SNode<E> * v = new SNode<E>;
    v -> elem = e;
    v -> next = NULL;

    if(head == NULL) //list is empty
        head = v;
    else
    {
        SNode<E> *temp = head;
        while (temp -> next != NULL)
            temp = temp -> next;
        temp -> next = v;
    }
}

但是对于更快的插入,您必须有两个指针,包括列表的头部和尾部。您不需要迭代整个列表来查找尾部。但是,在列表中添加和删除节点时,您必须同时满足头部和尾部的要求。 如果你有两个指针,这将是函数:

template <typename E>
void SLinkedList<E>::addBack(const E& e)
{
    SNode<E> * v = new SNode<E>;
    v -> elem = e;
    v -> next = NULL;

    if(head == NULL) //list is empty
        head = tail = v;
    else
        tail -> next = v;
}