Python中的链表,单个类(节点)。这可能吗?
我正在尝试以下我找到的例子。
由于每个节点都有一个“下一个”,我假设它创建了列表。
我得到的结果如下:
$ 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 :(得分:1)
def insertAtBeginning(self,data):
方法声明缺少选项卡,这就是self无法解析为对象实例的原因。
此外,列表的头部应该保存在节点类之外,否则,列表的每个元素都应该使用新的头部进行更新
您无需跟踪长度以便在头部位置添加元素。
算法相当简单:
if myListHead == none:
myListHead = new Node()
else:
myNewHead = new Node()
myNewHead.next = myListHead
myListHead = myNewHead
这是伪python代码......
答案 1 :(得分:0)
所以首先,如果函数是在类中定义的,它应该像self.insertAtBegin一样调用(&#34; bala&#34;)
第二,如果这是另一个试图管理节点实例/或数据结构序列的函数jusr,则不应该使用&#34; self&#34;作为输入参数,它保留了关键字,可能是&#34; node&#34;或其他什么。
答案 2 :(得分:0)
缺少LinkedList的一个类,作者没有包含这个。
这可以找到,函数放在LinkedList类中,而不是节点类。
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()