我有一個用于合并 2 個 leetcode 鏈表的代碼。但是,在對其進行測驗時,我遇到了瓶頸。如何用串列填充 ListNode?以下僅輸出 1,而不是合并的鏈表。
from typing import Optional
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def __str__(self):
return str(self.val)
class Solution:
def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
place_holder = ListNode()
tmp = place_holder
while list1 and list2:
if list1.val < list2.val:
tmp.next = list1
list1 = list1.next
else:
tmp.next = list2
list2 = list2.next
tmp = tmp.next
if list1 is None:
tmp.next = list2
if list2 is None:
tmp.next = list1
return place_holder.next
#input the two integer lists
l1 = [1, 2, 4]
l2 = [1, 3, 4]
list1 = ListNode(l1[0])
list2 = ListNode(l2[0])
list_result = Solution().mergeTwoLists(list1, list2)
print(list_result)
uj5u.com熱心網友回復:
修復您的__str__問題,以便列印整個鏈表:
def __str__(self):
s = f"({str(self.val)})"
if self.next:
s = f" -> {self.next}" # be careful not to build any circular lists...
return s
現在您可以看到合并函式的實際結果:
(1) -> (1)
這是 100% 正確的(至少對于這些輸入),因為您合并了串列(1)和(1).
撰寫一個函式,讓您可以將多個數字的串列轉換為單個鏈表,這樣可以更輕松地使用更長的輸入來測驗這個邏輯。一種選擇是在您的ListNode建構式中執行此操作:
from typing import List, Optional, Union
class ListNode:
def __init__(self, val: int = 0, *vals: int) -> None:
self.val = val
self.next = ListNode(*vals) if vals else None
def __str__(self) -> str:
s = f"({str(self.val)})"
if self.next:
s = f" -> {self.next}"
return s
現在你可以這樣做:
list1 = ListNode(1, 2, 4)
list2 = ListNode(1, 3, 4)
list_result = Solution().mergeTwoLists(list1, list2)
print(list_result) # (1) -> (1) -> (2) -> (3) -> (4) -> (4)
uj5u.com熱心網友回復:
您需要一種將常規 Python 串列轉換為鏈表的方法。您的節點每個都用一個整數初始化(不要介意它來自 l1 和 l2),因此它們不能自己增長任何下一個元素。要修復它,向 ListNode 添加一個接受串列的靜態方法:
class ListNode:
@static
def fromList(lst):
if not lst:
return None
return ListNode(lst[0], next=ListNode.fromList(lst[1:]))
這將遞回地將 Python 串列轉換為鏈表。然后你可以像這樣初始化你的鏈表:
list1 = ListNode.fromList(l1)
list2 = (same)
uj5u.com熱心網友回復:
你需要將你的list價值轉化為List價值。(我建議對節點和由這些節點組成的串列使用單獨的類。)
class ListNode:
def __init__(self, val, next=None):
self.val = val
self.next = next
def __str__(self):
return str(self.val)
class List:
def __init__(self, values=None):
# Dummy node that is independent of any actual
# data. You can store the length (or really, any
# metadata you like) in the dummy node.
self.head = ListNode(0)
if values is None:
values = []
for x in values:
self.append(x)
def append(self, value):
...
list1 = List(l1)
list2 = List(l2)
您需要實作List.append,可能還有其他一些方法。最好自己做所有的指標爭論,List并提供mergeTwoLists構造結果的方法List。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/446823.html
標籤:Python python-3.x 目的 哎呀
上一篇:從其屬性訪問類物件
