昨天面试被问到双向链表的删除,答得不好,特地总结下。
struct doubleListNode
{
int value;
doubleListNode*pre;
doubleListNode*next;
};
void delDoubleListNode(doubleListNode*head, int value)
{
doubleListNode*temp = head;
while (temp)
{
if (temp->value == value)
{
if (temp->pre == nullptr)
{
if (temp->next == nullptr)//单节点的情况
{
delete head;
head = nullptr;
}
else//头节点
{
head = temp->next;
head->pre = nullptr;
delete temp;
}
}
else if (temp->next == nullptr)//尾节点
{
temp->pre->next = nullptr;
delete temp;
}
else//中间节点
{
temp->pre->next = temp->next;
temp->next->pre = temp->pre;
delete temp;
}
}
else
temp = temp->next;
}
}