【问题标题】:Why am I getting a time out error even though I've specified for my Linked-list traversal to terminate?为什么即使我已指定我的链表遍历终止,我也会收到超时错误?
【发布时间】:2021-06-05 09:38:58
【问题描述】:

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

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

我收到了 TIME OUT 错误 - 但我似乎看不到问题所在。当我在纸上运行循环时,它似乎工作正常,任何想法是什么导致的,我认为循环不会终止?谢谢

【问题讨论】:

  • 我确定你的循环是错误的。行:curr.next = prev 立即覆盖curr.next。现在您丢失了存储在curr.next 的内容。我假设你已经让你的数据结构是循环的,而之前它是非循环的。现在你进入一个无限循环。
  • 感谢 quamrana,但它“覆盖”它是什么意思?我的理解是上面的 curr.next = prev 将帮助列表中的下一项指向前一项,从而反转链表。
  • 是的,你是对的,curr.next = prev 需要在循环中的某个时间点完成,但你现在不知道 curr.next 曾经指向哪里。你需要回到你的纸笔练习。
  • 哦,我现在看到了,谢谢!后面的那一行没有多大意义

标签: python while-loop linked-list


【解决方案1】:

有几个问题:

  • 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

【讨论】:

    猜你喜欢
    • 2022-11-03
    • 1970-01-01
    • 2022-06-10
    • 2021-07-17
    • 2019-10-11
    • 2020-10-25
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    相关资源
    最近更新 更多