2013-02-17 54 views
0

作为练习,我想创建自己的节点/列表类。反正我不知道如何将节点添加到列表...这里是我的代码:创建列表/节点类Python

class Node: 
    def __init__(self, value): 
     self.element = value 
     self.nextEl = None 

    def getEl(self): 
     return self.element 

    def getNext(): 
     return self.nextEl 

class List: 
    def __init__(self, fnode): 
     self.firstNode = fnode 

    def add(self, newNode): 

    def printList(self): 
     temp = self.firstNode 
     while (temp != None): 
      print temp.element 
      temp = temp.nextEl 

回答

4

你需要找有没有.nextEl指针的最后一个节点,并添加节点:

def add(self, newNode): 
    node = self.firstNode 
    while node.nextEl is not None: 
     node = next.nextEl 
    node.nextEl = newNode 

因为这必须遍历整个列表,大多数链表实现也保持到了最后元素的引用:

class List(object): 
    first = last = None 

    def __init__(self, fnode): 
     self.add(fnode) 

    def add(self, newNode): 
     if self.first is None: 
      self.first = self.last = newNode 
     else: 
      self.last.nextEl = self.last = newNode 

因为Python分配给多个目标由左到钻机ht,self.last.nextElself.last之前设置为newNode

您的代码风格的一些注意事项:

  • 使用is Noneis not None如果一个标识点进行测试,以None(这是一个单例)。
  • Python中不需要访问器;只是直接引用属性。
  • 除非这是Python 3中,由object继承使用新型类:

    class Node(object): 
        # ... 
    
+0

谢谢!很有用!我是否应该添加一个节点,但不在最后,但在中间或任意位置? – user1576208 2013-02-17 12:18:10

+0

@ user1576208:'newNode.nextEl,someNode.nextEl = someNode.nextEl,newNode'在'someNode'之前插入一个节点。 – 2013-02-17 12:20:42