提问者:小点点

在不使用临时变量的情况下在python中反转单链表


我正在尝试解决Leetcode上的一些问题。

我完成了反向链表问题,基本上需要你反向一个单链表。我的解决方案是这样的:

def reverseList(self, head):
    curr = head
    prev = None
    if head != None:
        while (curr.next):
            temp = curr.next
            curr.next = prev
            prev = curr
            curr = temp
        curr.next = prev
    return curr

我使用临时值来跟踪当前节点之后的原始NEXT节点,然后在下面一行中更改NEXT节点的值。

但是,当我将我的解决方案与其他解决方案进行比较时,似乎根本不需要临时值。下面是一个示例解决方案:

def reverseList(self, head):
    curr, prev = head, None
    while curr:
        curr.next = prev
        prev = curr
        curr = curr.next
    return prev

没有使用临时值,我正在试图找出原因。下图是我对解决方案中发生的事情的心理可视化:

为什么在curr.next发生突变后,代码仍然可以分配curr=curr.next(解决方案的第4行)?(解决方案的第6行)


共2个答案

匿名用户

你做得对,第二个解决方案不起作用。

匿名用户

@兰伯特说得对。

您在这里比较的特定解决方案不会逆转任何事情。将链表转换为新变量需要很长时间。