Python實現單鏈表(帶頭結點)
阿新 • • 發佈:2021-02-10
Python實現線性表的方法前面已經講過,但是不帶頭結點會有一些問題,主要就是第一個結點的處理需要和其他結點區別對待:
為了操作上的方便,在單鏈表第一個結點之前增加一個結點,稱為頭結點。頭結點的資料域可以不設任何資訊,也可以記錄表長等相關資訊。頭結點的指標域指向線性表的第一個元素結點。
不管帶不帶頭結點,頭指標始終指向連結串列的第一個結點,頭結點是帶頭結點連結串列的第一個結點,結點內通常不儲存資訊。
引入頭結點的好處:
1)由於開始結點的位置被存放在頭結點的指標域中,所以在連結串列的第一個位置上的操作和在表中其他位置上的操作一致,無須進行特殊處理。
直接上程式碼,其餘的函式在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]