双向链表的删除

82 阅读1分钟

昨天面试被问到双向链表的删除,答得不好,特地总结下。

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