python使用單鏈表節點類
阿新 • • 發佈:2020-09-03
節點變數會初始化為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個變數的狀態:
注意如下情況:
- node1沒有指向節點物件(是None)。
- node2和node3指向所連結到的物件。
- 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 = Nonefor count in range(1,6): head = Node(count, head) while head != None: print head.data head = head.next
關於這個程式,注意以下幾點:
- 指標head生成了連結串列結構。這個以這樣一種方式操作,最近插入的項總是位於結構的開始處。
- 因此,當顯示資料的時候,他們按照插入時相反的順序出現。
- 此外,當顯示資料的時候,head指標重新設定為下一個節點直到head指標變為None。因此,這個過程的最後,節點實際上從連結串列結構中刪除了。對於順序來說,節點不可再用,並且會在下一次垃圾回收的時候回收。