反向分配多个分配的LinkedList

时间:2019-07-13 07:37:11

标签: python-3.x linked-list

我在这里有以下代码:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        if head == None:
            return

        pre, node = None, head
        while node:
            pre, node.next, node = node, pre, node.next

        return pre

我正在试图使它的工作方式化。如果从列表开始,则pre成为head,因为node被分配给head。那么node.next被分配给pre,那么它指向自己吗?最后,node变成node.next,这本身就是?我在这里想念什么吗?

2 个答案:

答案 0 :(得分:1)

主要思想是将原始的头节点转换为新链表的最后一个节点,并将原始的最后一个节点转换为新的头节点,并转换节点之间的链接方向。

假设原始链表包含2个节点。

首先是pre = Nonenode = head,然后是node.next = pre,这意味着原始头节点成为新链表的最后一个节点。 node = node.next意味着转换节点之间的链接方向。 node.next = pre意味着将原来的最后一个转换为新的头部。

while重复执行上述过程

答案 1 :(得分:1)

多次分配与一次又一次的多次分配不同。所不同的是,语句右侧的值在任何反弹之前都已评估。实际上,右侧的值打包在一个元组中,然后解压缩到左侧的名称中。

在这种情况下这很重要,因为这意味着右侧的node.next将保存其值,因此当您将其重新绑定到其他内容(pre)时,旧值仍然可用成为赋值后的新node值。

您可能想尝试一些更简单的任务,例如经典的交换操作:

x = 1
y = 2

x, y = y, x  # swap x and y's values

print(x, y)  # prints "2 1"

_tup = y, x   # this is how it works, first pack the RHS values into a tuple
x, y = _tup   # then unpack the values into the names on the LHS

print(x, y)  # prints "1 2" as we've swapped back