1. 程式人生 > 其它 >Python實現單鏈表(帶頭結點)

Python實現單鏈表(帶頭結點)

技術標籤:python資料結構python資料結構

Python實現線性表的方法前面已經講過,但是不帶頭結點會有一些問題,主要就是第一個結點的處理需要和其他結點區別對待:
為了操作上的方便,在單鏈表第一個結點之前增加一個結點,稱為頭結點。頭結點的資料域可以不設任何資訊,也可以記錄表長等相關資訊。頭結點的指標域指向線性表的第一個元素結點。

在這裡插入圖片描述不管帶不帶頭結點,頭指標始終指向連結串列的第一個結點,頭結點是帶頭結點連結串列的第一個結點,結點內通常不儲存資訊。
引入頭結點的好處:
1)由於開始結點的位置被存放在頭結點的指標域中,所以在連結串列的第一個位置上的操作和在表中其他位置上的操作一致,無須進行特殊處理。

2)無論連結串列是否為空,其頭指標是指向頭結點的非空指標(空表中頭結點的指標域為空),因此空表和非空表的處理也就統一了。
直接上程式碼,其餘的函式在Python實現線性表已經展示,有興趣的可以去看看:

class linknode():#每個結點有兩個資料成員,結點元素和指向下一個結點的指標
    def __init__(self,item):            #建立節點
        self.item = item
        self.next = None
class  linklist():#初始化單鏈表,頭結點指標域為空
    def __init__(self)
:#初始化的頭結點的內容為None,指標域也為None self.headnode=linknode(None) self.headnode.next=None def headcreatlist(self, item): nod = linknode(item) # 新建一個結點並賦值 nod.next = self.headnode.next # 結點指標域指向第一個結點 self.headnode.next= nod # 頭結點指標指向當前結點 def tailcreatelist
(self,item): """尾部新增元素""" node =linknode(item) cur = self.headnode while cur.next != None: cur = cur.next cur.next = node def listlength(self): nod = self.headnode.next # 頭結點指標域指向第一個結點 nodnum =0 while (nod != None): nodnum += 1 nod = nod.next # 下一個結點 return nodnum # 遍歷單鏈表 def tralist(self): show = [] nod = self.headnode.next while nod != None: show.append(nod.item) nod = nod.next return show if __name__ == "__main__": ll1=linklist() for i in range(10): ll1.headcreatlist(i*10) len=ll1.listlength() print("單鏈表的長度為:",len) sh=ll1.tralist() print("頭插法建立的連結串列遍歷為:",ll1.tralist()) ll2 = linklist() for i in range(10): ll2.tailcreatelist(i * 10) len = ll2.listlength() print("單鏈表的長度為:", len) sh = ll2.tralist() print("頭插法建立的連結串列遍歷為:", ll2.tralist())

最終輸出為:

單鏈表的長度為: 10
頭插法建立的連結串列遍歷為: [90, 80, 70, 60, 50, 40, 30, 20, 10, 0]
單鏈表的長度為: 10
頭插法建立的連結串列遍歷為: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]