我正在尝试解决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行)
你做得对,第二个解决方案不起作用。
@兰伯特说得对。
您在这里比较的特定解决方案不会逆转任何事情。将链表转换为新变量需要很长时间。