如何删除双向链表数据并返回?

时间:2015-06-07 21:04:43

标签: c++ data-structures linked-list doubly-linked-list

template <class T>
class Node
{
public:
    T data;
    Node<T>* prev;
    Node<T>* next;

    // default constructor (parameterized)
    template <class T>
    Node(T value)
    {  
        data = value;
        prev = NULL;
        next = NULL;
    }
};
template <class T>
T CircularLinkedList<T>::RemoveAt(int p){
    Node<T>* temp = head;
    if (head == NULL){
        return 0;
    }
    else if (p == 0){
        return temp;
    }
    else{
        temp = head->next;
        for (int i = 0; i < p-1; i++)
            temp = temp->next; 
        temp->next = 
    }
}

我正在制作双向链表的删除功能 如果p大于等于0,我不知道如何继续这个代码 如何删除值并同时返回它?

1 个答案:

答案 0 :(得分:1)

假设head位于p == 0的位置,那么你应首先检查head是不是最后一个元素,因为如果是,列表将是空的。然后,您只需遍历列表直到所需的位置,然后将temp的prev-&gt;设置为temp-&gt; next,同样将temp的next-&gt; prev设置为temp-&gt; prev以删除temp。这适用于0和大于0的值。

以下是可能实施的快速示例:

template <class T>
T CircularLinkedList<T>::RemoveAt(int p)
{
    Node<T>* temp = head;
    if(head == NULL)
    {
        return NULL;
    }
    if(head->next == head)
    {
        // Set head to null and return
        head = NULL;

        return NULL;
    }

    // List won't be depleted after removal
    // Move to next p number of times, temp already at head
    for(int i = p; i > 0; --i)
    {
        temp = temp->next;
    }
    // Now remove temp and let it be return value
    temp->prev->next = temp->next;
    temp->next->prev = temp->prev;

    return temp.data;
}