1. 程式人生 > 實用技巧 >python使用單鏈表節點類

python使用單鏈表節點類

節點變數會初始化為None值或者一個新的None物件。

class Node(object):
    def __init__(self, data, next=None):
        self.data = data
        self.next = next

# 僅僅是空連結
node1 = None

# 一個包含資料和空連結的節點
node2 = Node("A")

# 一個包含資料和連結node2的節點
node3 = Node("B", node2)

下圖表示在執行該節點之後3個變數的狀態:

注意如下情況:

  1. node1沒有指向節點物件(是None)。
  2. node2和node3指向所連結到的物件。
  3. node2指向一個物件,其下一個指標為None。

現在,假設你試圖執行如下的語句,在已經包含了node2和node3的連結結構的開頭位置新增一個節點:

node1.next = node3

python會丟擲一個AttributeError作為響應。作出這一響應的原因是,變數node1包含了值None,因此不會引用包含了一個next欄位的物件。

要建立我們想要的連結,如下:

node1 = Node("c", node3)

或者,如下:

node1 = Node("c")
node1.next = node3

通常在嘗試訪問一個給定的節點變數之前。我們可以通過詢問其是否為None。從而保證其不發生意外:

if nodeVariable != None:
    <access a field in nodeVariable>

像陣列一樣,連結串列結構也是用迴圈來處理的。可以使用迴圈來建立一個連結串列結構,並且訪問其中的每一個節點。

下面是測試指令碼使用了Node類來建立一個單鏈表結構,並且輸出其內容:

# coding: utf-8
class Node(object):
    def __init__(self, data, next=None):
        self.data = data
        self.next = next


head = None

for count in range(1,6): head = Node(count, head) while head != None: print head.data head = head.next

關於這個程式,注意以下幾點:

  • 指標head生成了連結串列結構。這個以這樣一種方式操作,最近插入的項總是位於結構的開始處。
  • 因此,當顯示資料的時候,他們按照插入時相反的順序出現。
  • 此外,當顯示資料的時候,head指標重新設定為下一個節點直到head指標變為None。因此,這個過程的最後,節點實際上從連結串列結構中刪除了。對於順序來說,節點不可再用,並且會在下一次垃圾回收的時候回收。