【发布时间】:2016-08-10 16:49:49
【问题描述】:
这是一个 LeetCode 问题,我知道它的解决方案,但想知道为什么我的代码不起作用。
编写一个函数来删除单链表中的一个节点(除了尾部),只允许访问该节点。
假设链表是 1 -> 2 -> 3 -> 4 并且给定第三个值为 3 的节点,调用函数后链表应该变为 1 -> 2 -> 4
乍一看,我的直觉是像数组一样删除:
将所有节点值向前移动,然后删除尾部,这是我的实现和测试用例:
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
node1 = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node4 = ListNode(4)
node5 = ListNode(5)
node1.next = node2
node2.next = node3
node3.next = node4
node4.next = node5
def deleteNode(node):
"""
:type node: ListNode
:rtype: void Do not return anything, modify node in-place instead.
"""
while node.next:
node.val = node.next.val
node = node.next
node = None
deleteNode(node4)
但删除后,它有两个5值节点,尾部仍然保留,谁能解释一下这里出了什么问题?
deleteNode(node4)
node1.val
Out[162]: 1
node1.next.val
Out[163]: 2
node1.next.next.val
Out[164]: 3
node1.next.next.next.val
Out[165]: 5
node1.next.next.next.next.val
Out[166]: 5
非常感谢任何帮助。
【问题讨论】:
标签: python algorithm linked-list