2013-02-17 57 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