【剑指offer】在O(1)时间复杂度下删除一个节点
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def DeleteNode(self, head, node):
if node.next != None:
nextNode = node.next
node.val = nextNode.val
node.next = nextNode.next
del nextNode
elif head == node:
del node
head = None
else:
p = head
while p.next != node:
p = p.next
p.next = None
del node
计算时间复杂度:
对于尾节点而言,由于需要遍历时间复杂度为O(n)。因此总的时间复杂度为:
[O(1) X (n - 1) + O(n) X 1] / n = O(1)。也就是说,特殊情况下需要遍历,但是总的时间复杂度仍然是符合要求的。