2017-07-19 6 views
0

Ich bin neu in der Programmierung im Allgemeinen und habe gerade begonnen, Python zu verwenden. Ich habe vor kurzem über verknüpfte Listen gelernt, und ich hatte Probleme, eine Funktion zu verwenden, um ein Element am Ende meiner Liste hinzuzufügen. Die unten aufgelistete Funktion namens addToTail funktioniert nicht und gibt mir den Fehler: TypeError: Objekt 'NoneType' unterstützt keine Artikelzuweisung. Jede Hilfe würde sehr geschätzt werden, danke.Funktion zum Hinzufügen von Element am Ende einer verketteten Liste

def addToHead(myList, value): 
    node = {} 
    node['data'] = value 
    node['next'] = myList 
    return node 

def addToTail(myList, value): 
    ptr = myList 
    while ptr != None: 
     ptr = ptr['next'] 
    node = {} 
    node['data'] = value 
    node['next'] = None 
    ptr['next'] = node 
    return myList 

def printList(myList): 
    ptr = myList 
    while ptr != None: 
     print(ptr['data']) 
     ptr = ptr['next'] 
    print('None') 

def createList(pythonList): 
    linkedList = None 
    for i in pythonList: 
     linkedList = addToHead(linkedList, i) 
    return linkedList 



firstList = createList([5, 10, 15]) 
addToTail(firstList, 10) 
printList(firstList) 
+0

Da Sie Ihren Zeiger verstärken, Sie oben enden zeigt auf 'None', immer bevor Sie versuchen, hinzufügen ein neues Element. Sie müssen einen abschließenden Zeiger umherbewegen, der auf das vorherige letzte Element zeigt, damit dieses Element auf Ihren neuen letzten Punkt zeigt. – JohanL

Antwort

0

Das Problem ist Ihr addToTail wird immer den Zeiger als None haben, weil Sie laufen, bis der Wert keines in Ihrer while-Schleife ist. Fügen Sie stattdessen eine zusätzliche Variable hinzu, die auf das vorherige Element in der verknüpften Liste verweist. Auf diese Weise erhalten Sie den letzten Wert in der Liste statt None.

def addToTail(myList, value): 
    ptr = myList 
    prev = ptr 
    while ptr != None: 
     prev = ptr 
     ptr = ptr['next'] 
    node = {} 
    node['data'] = value 
    node['next'] = None 
    prev['next'] = node 
    return myList 
2

Ihr Problem liegt mit diesem Teil addToTail() Funktion:

ptr = myList 
while ptr != None: 
    ptr = ptr['next'] 

Sie Looping im Wesentlichen bis kein nächster Knoten ist und ptr wird auf None. Wenn Sie dann später versuchen, den Knoten mit ptr['next'] = node zuzuweisen, schlägt dies offensichtlich fehl, da Sie versuchen, auf None zuzugreifen, nicht auf den Endknoten. Sie können vor der Übertragung durch die Überprüfung für das nächste Element dieser (zu halten mit Ihrem Stil) lösen:

ptr = myList 
while True: 
    if ptr['next'] is None: 
     break 
    ptr = ptr['next'] 
Verwandte Themen