【剑指offer】在O(1)时间复杂度下删除一个节点

【剑指offer】在O(1)时间复杂度下删除一个节点
【剑指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)。也就是说,特殊情况下需要遍历,但是总的时间复杂度仍然是符合要求的。