2017-11-03 2 views
-2

Ich habe eine Zuordnung für verknüpfte Listen für die Schule, obwohl ich gerade den Hang der Klassenkonstruktoren bekommen. Ich versuche, die Grundlagen der Datenstruktur der verknüpften Liste einfach zu verstehen und verstehe das Grundkonzept. Ich habe viele Youtube-Tutorials und ähnliches gesehen, aber wo ich nicht verstehe, wie ich die Fracht oder Daten in meinen Knoten mit Hilfe einer Schleife ausdrucken kann.Verknüpfte Listen in Python

ich etwas in dieser Richtung geschrieben haben:

class Node: 

    def __init__(self, value, pointer): 
     self.value = value 
     self.pointer = pointer 

node4 = Node(31, None) 

node3 = Node(37, None) 

node2 = Node(62, None) 

node1 = Node(23, None) 

Nun ... Ich verstehe, dass jeder Knoten Deklaration ein Aufruf der Konstruktor der Klasse von Knoten ist und dass die Liste verknüpft ist, da jeder Knoten einen Zeiger enthält zum nächsten Knoten, aber ich verstehe einfach nicht, wie man sie mit einer Schleife ausdruckt. Ich habe Beispiele gesehen, die globale Variablen für den "Kopf" verwenden, und ich habe Unterklassen gesehen, die zur Erfüllung der Aufgabe erstellt wurden. Ich bin alt und dumm. Ich fragte mich, ob jemand es langsam angehen und es mir erklären könnte, als wäre ich 5. Wenn jemand da draußen das Mitgefühl und die Bereitschaft hat, meine Hand durch die Erklärung zu halten, wäre ich sehr dankbar. Vielen Dank im Voraus, nette Herren.

+0

Sie haben keine verknüpfte Liste in Ihren obigen Snippet-Only-Knoten. Sie benötigen nun eine richtige 'LinkedList'-Klasse mit einem Verweis auf ihren ersten ("head" oder wie auch immer gearteten) Node und Methoden, um Werte hinzuzufügen oder zu entfernen, Wert an einer bestimmten Position zu erhalten, usw. etc ... –

Antwort

0

Zunächst einmal Ihre Knoten sollte wie folgt erstellt werden:

node4 = Node(31, node3) 
node3 = Node(37, node2) 
node2 = Node(62, node1) 
node1 = Node(23, None) 

Nun, ich bin sicher, dass Sie, dass der letzte Knoten in der Liste auf None weisen darauf sehen kann. Daher können Sie die Liste so lange durchlaufen, bis Sie auf Keine stoßen. So etwas sollte funktionieren:

printhead = node4 
while True: 
    print(printhead.value) 
    if printhead.pointer is None: 
     break; 
    else : 
     printhead = printhead.pointer 
+0

' NameError' in der ersten, zweiten und dritten Zeile – ElmoVanKielmo

+0

Mac ... vielen Dank. Ich wusste, dass es nicht so schwer zu begreifen war. Ich habe einen Fehler gemacht, als ich auch meinen ursprünglichen Beitrag geschrieben habe. Ich wollte eingeben: node4 = Knoten (31, None) node3 = Knoten (37, node4) node2 = Knoten (62, node3) node1 = Knoten (23, node2) ............. ....... Entschuldigung ... Ich habe den Posten gemacht, als ich sehr müde war ... (das ist sowieso meine Entschuldigung) ... vielen Dank auch ... das war sehr einfach Beispiel ... genau das, was ich brauchte ... zu oft denke ich, dass Leute Hilferufe als Chance nutzen, um zu zeigen, wie sehr sie uns Noobs verwirren können, anstatt uns tatsächlich zu helfen – OldNewb

+0

Froh, zu helfen. Alles gut, es ist ein leichter Fehler zu machen. Allerdings würde ich sagen, dass die Antwort von @ElmoVanKielmo technisch korrekter ist. Ich versuchte jedoch, den Punkt zu vermitteln, obwohl es Probleme mit meiner Antwort selbst gibt. –

0

Dies ist eine sehr einfache verknüpfte Listenimplementierung nur für Bildungszwecke.

from __future__ import print_function 
"""The above is needed for Python 2.x unless you change 
`print(node.value)` into `print node.value`""" 

class Node(object): 
    """This class represents list item (node)""" 

    def __init__(self, value, next_node): 
     """Store item value and pointer to the next node""" 
     self.value = value 
     self.next_node = next_node 


class LinkedList(object): 
    """This class represents linked list""" 

    def __init__(self, *values): 
     """Create nodes and store reference to the first node""" 
     node = None 
     # Create nodes in reversed order as each node needs to store reference to next node 
     for value in reversed(values): 
      node = Node(value, node) 
     self.first_node = node 
     # Initialize current_node for iterator 
     self.current_node = self.first_node 

    def __iter__(self): 
     """Tell Python that this class is iterable""" 
     return self 

    def __next__(self): 
     """Return next node from the linked list""" 
     # If previous call marked iteration as done, let's really finish it 
     if isinstance(self.current_node, StopIteration): 
      stop_iteration = self.current_node 
      # Reset current_node back to reference first_node 
      self.current_node = self.first_node 
      # Raise StopIteration to exit for loop 
      raise stop_iteration 
     # Take the current_node into local variable 
     node = self.current_node 
     # If next_node is None, then the current_node is the last one, let's mark this with StopIteration instance 
     if node.next_node is None: 
      self.current_node = StopIteration() 
     else: 
      # Put next_node reference into current_node 
      self.current_node = self.current_node.next_node 
     return node 

linked_list = LinkedList(31, 37, 62, 23) 

for node in linked_list: 
    print(node.value) 

Dieser verarbeitet nicht richtig viele Fälle (einschließlich Pause Anweisung in der Schleife), aber das Ziel ist in Python Mindestanforderungen für die verknüpfte Liste Implementierung zu zeigen.

Verwandte Themen