LeetCode之“链表”:在O(1)时间删除链表节点

时间:2023-03-09 06:52:11
LeetCode之“链表”:在O(1)时间删除链表节点

  下边讨论暂不包括尾节点。

  一般来说,我们要删除链表中的一个节点是需要知道其上一节点的。但我们真的需要吗?

  其实我们可以将待删节点的下一节点的值和指向的下一节点赋予待删节点,然后删除待删节点的下一节点。具体示例程序如下:

 //O(1)时间删除链表节点,从无头单链表中删除节点
void deleteRandomNode(Node *cur)
{
assert(cur != NULL);
assert(cur->next != NULL); //不能是尾节点
Node* pNext = cur->next;
cur->data = pNext->data;
cur->next = pNext->next;
delete pNext;
}