如何删除双向链表数据和return呢?
How to delete doubly linked list data and return it?
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,我不知道如何继续这段代码。
如何同时删除值和 return 它?
假设 head 位于 p == 0 位置,那么您应该首先检查 head 不是最后一个元素,因为如果是,列表将为空。然后,您只需遍历列表直到所需位置,然后将 temp 的 prev->next 设置为 temp->next,同样将 temp 的 next->prev 设置为 temp->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;
}
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,我不知道如何继续这段代码。
如何同时删除值和 return 它?
假设 head 位于 p == 0 位置,那么您应该首先检查 head 不是最后一个元素,因为如果是,列表将为空。然后,您只需遍历列表直到所需位置,然后将 temp 的 prev->next 设置为 temp->next,同样将 temp 的 next->prev 设置为 temp->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;
}