从单链表中删除节点(尾部除外)

时间:2016-01-06 19:05:58

标签: python

我是编程的初学者,我正在尝试理解以下代码:

    # class ListNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None

    class Solution(object):
        def deleteNode(self, node):
            node.val = node.next.val
            node.next = node.next.next

我对代码的直觉如下: 我知道该节点是对链表中元素的引用,而node.next是指向下一个节点的指针。我也理解node.val将当前节点的值设置为下一个节点的值。

的目的究竟是什么?
    node.next = node.next.next?

3 个答案:

答案 0 :(得分:3)

想象一下以下链接列表节点(其中n2是您要删除的节点)

... -> n1 -> n2 -> n3 -> ...
 node -^     ^     ^- node.next.next
             |
     node.next

因此,如果你设置node.next = node.next.next,你会得到这个:

             n2
             |
             v
... -> n1 -> n3 -> ...
 node -^     ^     
             |      
     node.next

因为现在一旦函数返回就没有任何东西引用它,它将被垃圾收集。

答案 1 :(得分:2)

NodeA - > NodeB - > NODEC

所以目前NodeA.next是NodeB

通过分配NodeA.next = NodeA.next.next我们得到NodeA.next = NodeB.next,这使得

NodeA.next = NodeC

所以链现在是

NodeA - > NODEC

答案 2 :(得分:1)

这意味着删除了指向下一个节点的链接,并且此节点链接到next.next节点,这意味着删除了下一个节点,并将其值替换为此节点值。 例如,我们有以下列表:

1->2->3->4
1.next(2) = 1.next.next(3)

所以列表更新为:

1->3->4