Ich lerne Datenstruktur und merge Linklist Übung in Python zu tun. Aber ich begegne einigen verwirrenden Problemen. Die Definition des Knotens ist:Was ergibt sich der Unterschied in diesen beiden Segmenten des Codes
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
in folgenden Funktionen, Parameter l1 und l2 sind Linklisten zusammengeführt werden, und die Funktion sollte eine fusionierte Linkliste zurück.
Die erste Implementierung ist wie folgt:
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
jedoch nicht, weil arbeiten, wenn es um die Schleife eintritt, da l1 eine unendliche linkelist das wird Werte all 0. Die nächste Implementierung nicht die Ursache für dieses Problem :
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
Was ergibt den Unterschied zwischen diesen zwei Segmenten? Warum wird l1 zu einer unendlichen Linkliste? Und ich habe noch eine weitere Frage: Variable 'l' wurde am Anfang 'Start' zugewiesen, in jeder Schleife bewegt sich l zum nächsten Knoten, während Start keine Änderung hat. Warum zeigt Start am Ende auf eine zusammengeführte Liste? Warum nicht gleich bleiben oder nur gleich zu l?
Ich hoffe, jemand kann meine Frage beantworten. Vielen Dank.
Was sind l1 und l2? Sie nennen sie Listen, aber sie scheinen 'Val'- und' Next'-Methoden zu haben; Was machen die? –
@DanielRoseman Sie sind Linklisten, die zusammengeführt werden sollen. Ich habe gerade die Definition des Knotens hinzugefügt, um es klarer zu machen. Vielen Dank. – BiuBiuBiu