私はデータ構造を学び、Pythonでマージリンクリストを実行しています。しかし、私はいくつかの混乱する問題に直面します。ノードの定義は次の関数、パラメータL1およびL2においてこれらの2つのコードセグメントの違いは何ですか。
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
がマージされるlinklistsであり、関数がマージLINKLISTを返すべきです。
最初の実装は以下の通りである:
def merge(l1, l2):
if l1 == None:
return l2
if l2 == None:
return l1
p = l1
q = l2
if l1.val < l2.val:
l = l1
else:
l = l2
start = l
while p and q:
if p.val < q.val:
l.next = p
p = p.next
else:
l.next = q
q = q.next
l = l.next
if p!= None:
l.next = p
if q!=None:
l.next = q
return start
しかし、これは動作していない、それはループに入ったとき、L1は、その値であり、無限linkelistなるので、すべての0次の実装は、この問題が発生することはありませんでしたので、 :
def mergeTwoLists(self, l1, l2):
if l1 == None:
return l2
if l2 == None:
return l1
l = ListNode(0)
start = l
while l1 and l2:
if l1.val < l2.val:
l.next = l1
l1 = l1.next
else:
l.next = l2
l2 = l2.next
l = l.next
if l1!= None:
l.next = l1
if l2!=None:
l.next = l2
return start.next
この2つのセグメントの違いは何ですか?どのようにしてl1は無限のリンクリストになりますか? また、別の質問もあります。変数 'l'は最初に 'start'に割り当てられ、各ループではlが次のノードに移動しますが、startには変更がありません。最後にマージされたリストを指しているのはなぜですか?どうして同じままにするのではなく、ちょうどlに等しいか?
誰かが私の質問に答えられることを願っています。どうもありがとうございました。
l1とl2は何ですか?あなたはそれらのリストを呼び出しますが、 'val'メソッドと' next'メソッドがあるようです。それらは何をするのですか? –
@DanielRosemanマージするリンクリストです。ノードの定義を追加して、より明確にしました。ありがとう。 – BiuBiuBiu