题目一:在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