2016-11-13 3 views
1
class LN: 
     def __init__(self,value,next=None): 
      self.value = value 
      self.next = next 

    def add_after(ll,value,new): 
     item = ll 
     while item is not None: 
      if item.value == value: 
       newnode = LN(new, item.next) 
       item.next = newnode 
       break 
      else: 
       item = item.next 

meine add_after-Funktion nimmt eine Liste wie [2,1,8,2,2,4,2,5,2], und einen Wert und einen neuen Wert. Es fügt jedem Wert, der in der Liste angezeigt wird, den neuen Wert hinzu. Beispiel:verknüpfte Liste Funktion, die eine Liste zurückgeben

l = [2,1,8,2,2,4,2,5,2], Aufruf add_after (a, 2, -1) gibt 2 zurück -> - 1-> 1- > 8-> 2 -> - 1-> 2 -> - 1-> 4-> 2 -> - 1-> 5-> 2 -> - 1-> Keine. add -1 nach jeder 2 in der Liste

Das Problem mit meiner Funktion add_after ist, dass es nur den neuen Wert zu dem ersten Wert hinzufügen, der in der Liste erscheint.

Wenn ich beispielsweise add_after (ll, 2, -1) zur Liste [1,8,2,4,2,5,2] aufrufe, gibt es 1 -> 8-> 2 -> - zurück 1-> 4-> 2-> 5-> 2-> Keine

Kann mir jemand helfen, meine add_after-Funktion zu reparieren, damit sie auf alle Werte in der Liste angewendet werden kann? Danke vielmals.

+0

Können Sie Ihre Beispiele erläutern? Ich verstehe nicht, wie du deine verknüpfte Liste bekommen hast oder was deine Parameter bedeuten. – drum

+0

add_after (ll, value, neuer_Wert), wenn ll = [2,1,8,2,2,4,2,5,2], ruft add_after (ll, 2, -1) 2 -> - 1- zurück > 1-> 8-> 2 -> - 1-> 2 -> - 1-> 4-> 2 -> - 1-> 5-> 2 -> - 1-> Keine. es fügt jedem Wert einen neuen Wert hinzu. – zeyuxie

+0

Mögliches Duplikat von [Ein Element an einem bestimmten Index in einer Liste einfügen und eine aktualisierte Liste zurückgeben] (http://stackoverflow.com/questions/14895599/insert-an-element-at-specific-index-in-a-list- und-return-updated-list) –

Antwort

1

Die Anweisung break unterbricht die Schleife, so dass es den Rest der Liste nicht durchläuft.

Es gab auch andere Probleme. Eine korrigierte Version des Codes:

+0

Ich habe versucht, die Pause zu machen, aber das Programm scheint zu stecken. – zeyuxie

+0

Es scheint, dass Sie rechts und als nächstes mischen. – quantummind

+0

Ich bin mir nicht sicher, was das bedeutet, können Sie mehr erklären? – zeyuxie

1

Unten ist eine schnelle Möglichkeit, eine Liste in eine doppelt verknüpfte Liste zu verwandeln. Lesen und verstehen Sie es, dann sollten Sie es an Ihre Bedürfnisse anpassen können.

def link_list(l): 
    if not l: 
     return None 
    head = TN(l[0]) 
    prev = head 
    for val in l[1:]: 
     curr = TN(val, prev) 
     prev.right = curr 
     prev=curr 
    return head 
+0

Entschuldigung, ich habe den falschen Code vorher gepostet, ich habe ihn geändert – zeyuxie