删除链表的节点——jzoffer

题目一:在O(1)时间内删除链表的节点

给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点,链表节点与函数的定义如下:

class NodeLinkList:
    def __init__(self, value=None):
        self.value = value
        self.next = None
        
def delete_node(head_node, delete_node):
    pass

删除指定节点,一般的方法是通过遍历,找到该节点的pre节点,将其的next设置为【删除节点】的next,这个方法的时间是O(n)。另一种方法是,将【删除节点】的next复制到【删除节点】上,然后删除【删除节点】的next。

这个时候需要考虑几种情况,一、【删除节点】是尾部节点;二、链表只有一个节点;三、【删除节点】在中间某处。

python无法删除节点对象

def delete_node(head_node, del_node):
    if not head_node or not del_node:
        return 
    # 【删除节点】是内部结点,不是尾节点
    if del_node.next:
        next_node = del_node.next
        del_node.value = next_node.value
        del_node.next = next_node.next
        next_node.value = None
        next_node.next = None
    # 【删除节点】是尾节点,且链表只有一个节点
    elif head_node == del_node:
        head_node.next = None
        head_node.value = None
    # 【删除节点】是尾节点,链表有多个节点
    else:
        node = head_node
        while node.next != del_node:
            node = node.next
        node.next = None
        del_node.next = None
        del_node.value = None

你可能感兴趣的:(删除链表的节点——jzoffer)