题目
给定链表的头指针和一个结点指针,在O(1)时间内删除该结点。
解法
1. 需要注意的是,这里只是删除该结点的步骤为O(1),而不是查找到该结点的时间复杂度。
2. 求解思想:一般来说,我们删除链表中的一个结点是将在它前驱结点上进行操作,将它前驱结点的next指针指向K的后继节点,K的后继指向NULL,然后删除要删除的节点K即可。但由于这里仅给出了指向要删除结点K的指针,找到K的前驱结点则需要从头指针进行遍历,这样进行的时间复杂度一定大于O(1)。因此采用如下方法:将K的后继节点的值复制到K中,然后删除K的后继节点即可。这样操作的时间复杂度则满足条件要求。
DELETE-LIST-NODE(ListNode L.head, ListNode delete):
if L.head == null:
return null;
if delete == null:
error
ListNode temp = delete.next;
delete.value = temp.value;
delete.next = temp.next;
temp.next = null;
DELETE temp;
return L.head;