Python中的链表与单个类(节点)

时间:2016-04-19 17:28:53

标签: python linked-list

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")

3 个答案:

答案 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)

&#34>自我&#34;这就像&#34;这个&#34;用其他语言表示&#34;当前实例I&#39; m在&#34;中,而不是任意类型的类,

所以首先,如果函数是在类中定义的,它应该像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()