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



我无法让这个程序将节点附加到链表的末尾。我知道它必须与"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;
}

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

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;
}

相关内容

  • 没有找到相关文章