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。因此,這個過程的最后,節點實際上從鏈表結構中刪除了。對於順序來說,節點不可再用,並且會在下一次垃圾回收的時候回收。

 結束!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM