2016-04-19 6 views
0

Verknüpfte Liste in Python mit einer einzelnen Klasse (Knoten). Ist das möglich?Verknüpfte Liste in Python mit einer einzelnen Klasse (Knoten)

Ich versuche das folgende Beispiel, das ich gefunden habe.

Da jeder Knoten eine "nächste" hat, nehme ich an, dass die Liste erstellt.

Das Ergebnis erhalte ich ist wie folgt:

$ python linked.py 
Traceback (most recent call last): 
    File "linked.py", line 40, in <module> 
    insertAtBeginning("test1") 
TypeError: insertAtBeginning() takes exactly 2 arguments (1 given) 


#Node of a Singly Linked List 
class Node: 
    #constructor 
    def __init__(self): 
    self.data=None 
    self.next=None 

    #method for setting the data field of the node 
    def setData(self,data): 
    self.data=data 

    #method for getting the data field of the node 
    def getData(self,data): 
    return self.data 

    #method for setting the next field of the node 
    def setNext(self,next): 
    self.next=next 

    #method for getting the next field of the node 
    def getNext(self,next): 
    return self.next 

    #returns true if the node points to another node 
    def hasNext(self): 
    return self.next != None 

def insertAtBeginning(self,data): 
    newNode=Node() 
    newNode.setData(data) 

    if self.length==0: 
    self.head=newNode 
    else: 
    newNode.setNext(self.head) 
    self.head=newNode 

    self.length+=1 

insertAtBeginning("test1") 
insertAtBeginning("test2") 
+0

Sie denken in Java und Codierung in Python-Syntax. Das ist hässlich, ich mag es nicht. –

+0

Dieser Code stammt aus einem Buch mit dem Titel "Datenstruktur und algorithmisches Denken mit Python" –

+1

Ob es Einstein oder Martijn Pieters ist, die es geschrieben haben, das ist hässlich. Zum Beispiel sind Getter und Setter nicht pythonisch. –

Antwort

1
def insertAtBeginning(self,data): 

Methodendeklaration fehlt Tabs ist, deshalb selbst nicht Instanz-Objekt löst.

Auch der Leiter Ihrer Liste soll, sonst außerhalb Knotenklasse gehalten werden, sollte jedes Element der Liste mit dem neuen Leiter

Sie müssen hinzufügen nicht halten aktualisiert Spur der Länge um ein Element an der Kopfposition.

Der Algorithmus ist einfach:

if myListHead == none: 
    myListHead = new Node() 
else: 
    myNewHead = new Node() 
    myNewHead.next = myListHead 
    myListHead = myNewHead 

dies Pseudo-Code Python ...

0

das "Selbst" hier wie "this" in einer anderen Sprache, die für „aktuelle Instanz steht I‘ m in“(Bala "), nicht eine beliebige Art von Klasse,

so erste, wenn die Funktion innerhalb einer Klasse definiert wurde, sollte es wie self.insertAtBegin genannte"

SECON d, wenn dies eine andere Funktion ist, die versucht, eine Sequenz von Knoteninstanz/oder Datenstruktur zu verwalten, sollten Sie nicht "self" als Eingabeparameter verwenden, es ist erhaltenes Schlüsselwort, vielleicht "Knoten" oder etwas anderes.

0

Es fehlte eine Klasse für die LinkedList, der Autor hat dies nicht aufgenommen.

Dies funktioniert, und die Funktionen gehen in der LinkedList-Klasse statt der Knotenklasse.

class LinkedList: 
    #constructor 
    def __init__(self): 
    self.head=None 
    self.length=0 

    def insertAtBeginning(self,data): 
    newNode=Node() 
    newNode.setData(data) 

    if self.length==0: 
     self.head=newNode 
    else: 
     newNode.setNext(self.head) 
     self.head=newNode 

    self.length+=1 

    def printList(self): 
    current=self.head 
    while current.getNext() != None: 
     print current.data 
     current=current.getNext() 

    print current.data 

newList=LinkedList() 
newList.insertAtBeginning("test") 
newList.insertAtBeginning("test123") 
newList.printList() 
Verwandte Themen