我正在努力解決 leetcode 上的這些鏈表問題(以及樹問題,因為它們使用類似的結構)。示例https://leetcode.com/problems/merge-two-sorted-lists/
如果我嘗試在 leetcode 的魔法盒之外運行此代碼,我會遇到問題。
我的 mergeTwoLists 函式在 leetcode 編輯器中運行良好(成功運行,被接受)
from typing import Optional
# Definition for singly-linked list.
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def mergeTwoLists(list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
prehead = ListNode(-1)
prev = prehead
while list1 and list2:
if list1.val <= list2.val:
prev.next = list1
list1 = list1.next
else:
prev.next = list2
list2 = list2.next
prev = prev.next
breakpoint()
prev.next = list1 if list1 is not None else list2
return prehead.next
if __name__ == '__main__':
l1 = ListNode(1)
l1_2 = ListNode(2)
l1_3 = ListNode(4)
l1.next = l1_2
l1_2.next = l1_3
l2 = ListNode(1)
l2_2 = ListNode(3)
l2_3 = ListNode(4)
l2.next = l1_2
l2_2.next = l1_3
print(mergeTwoLists(l1, l2))
問題是,當我嘗試從終端獨立運行上述程式時,它會進入無限回圈。
原因是由于我傳遞給函式的內容,如果我在第一個回圈的末尾拋出一個斷點()并檢查 list1 和 list2
(Pdb) list1
<__main__.ListNode object at 0x00000294E1F8FEE0>
(Pdb) list2
<__main__.ListNode object at 0x00000294E1F8FE20>
這是有道理的。它解釋了無限回圈,當轉換為 bool 時,類物件 eval 為 True。
所以基于此,如果我想讓這段代碼在 leetcode 之外運行,我需要做一些不同的事情。我需要更多關于我的類定義的資訊,或者我的測驗用例設定有誤?
有誰知道 Leetcode 系統中 ListNode 類的完整定義嗎?或者我應該如何設定我的測驗有什么遺漏嗎?
謝謝!
uj5u.com熱心網友回復:
所以是的,你是對的,你的while list1 and list2this 評估為True。
你可以像這樣解決它,更明確:
def mergeTwoLists(list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
prehead = ListNode(-1)
prev = prehead
while (list1.next is not None) and (list2.next is not None):
if list1.val <= list2.val:
prev.next = list1
list1 = list1.next
else:
prev.next = list2
list2 = list2.next
prev = prev.next
prev.next = list1 if list1 is not None else list2
return prehead.next
它可能在 leetcode 中有效,因為他們為該類定義了另一種方法。如果你這樣定義類:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def __bool__(self):
"""Return bool(self)."""
return self.next is not None
然后,__bool__當您嘗試 do 時,將呼叫該方法list1 and list2,并且它執行相同的行為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/465645.html
標籤:python-3.x 班级 测试 链表
