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,我不知道如何继续这个代码 如何删除值并同时返回它?
答案 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;
}