为什么即使我已指定终止链接列表遍历,我仍然会收到超时错误?



我正在用以下代码反转一个单链表:

class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def reverseList(self, head: ListNode) -> ListNode:

if not head: 
return []

curr = head.next
prev = head
while curr:
curr.next = prev 
curr = curr.next
prev = prev.next

return curr

我犯了一个超时错误,但我似乎看不出这个问题。当我在纸上运行循环时,它似乎工作得很好,有什么想法导致了什么,我认为循环不会终止吗?感谢

有几个问题:

  • curr.next在执行curr = curr.next时已被修改。因此,不是在列表中向前,而是向后(因为此时curr.next实际上等于prev(。

  • head.next从未被修改,但它应该变成None。你实际上应该开始一步";较早的";使得curr等于head,并且prev应该是None

  • return curr总是返回None,因为这是while循环退出的条件。

这里有一个修复:

class Solution:
def reverseList(self, head: ListNode) -> ListNode:
curr = head
prev = None
while curr:
nxt = curr.next  # Remember what the next node is before losing the reference
curr.next = prev  # Rewire.
prev = curr  # Move the two references one step forward
curr = nxt  # ... using the saved reference

return prev   # Return what was the tail node, but now is the new head

所以我们在这里使用一个临时变量nxt。您也可以使用元组赋值。。。那么就不需要显式的临时变量:

while curr:
curr.next, prev, curr = prev, curr, curr.next

最新更新