# linklist.py
# 初始化鏈表內(nèi)每個(gè)節(jié)點(diǎn)的類(lèi),每個(gè)節(jié)點(diǎn)包含一個(gè)數(shù)據(jù)域和一個(gè)指針域
#__init__這種帶雙線的函數(shù)理解為創(chuàng)建類(lèi)的對(duì)象時(shí)會(huì)自動(dòng)調(diào)用的函數(shù),類(lèi)似于java的構(gòu)造函數(shù)
class linkNode:
def __init__(self, data, p = 0): # 鏈表節(jié)點(diǎn)初始化時(shí)猪落,就有一個(gè)數(shù)據(jù)域和指針域秧耗,數(shù)據(jù)域是初始化時(shí)入?yún)Q定椎例,指針域默認(rèn)為空
self.data = data
self.next = p
class linkList:
def __init__(self):
self.head = None # 初始化時(shí)虑润,只有一個(gè)頭結(jié)點(diǎn)
# 通過(guò)待插入鏈表的數(shù)據(jù)芝此,依次生成各個(gè)鏈表的節(jié)點(diǎn)(尾插法睡雇,插入data),data是一個(gè)數(shù)組,存儲(chǔ)了n個(gè)待插入鏈表的數(shù)據(jù)
def initListTail(self, data):
self.head = linkNode(data[0]) # 創(chuàng)建頭結(jié)點(diǎn)掉瞳,即第一個(gè)有值節(jié)點(diǎn)
p = self.head # p 代表了鏈表的頭結(jié)點(diǎn)毕源,因此可以使用p.data和p.next訪問(wèn)鏈表節(jié)點(diǎn)的兩個(gè)域
for i in data[1:]:
node = linkNode(i)
p.next = node
p = p.next
# 判斷鏈表是否為空
def isEmpty(self):
p = self.head
if p.next == 0:
print("The linkList is empty!")
return 1 # 方便后續(xù)根據(jù)if語(yǔ)句調(diào)用該判斷函數(shù)
else:
print("The linkList is not empty!")
return 0
# 遍歷鏈表并輸出,用','隔開(kāi)
def readList(self):
if self.isEmpty():
exit(0)
p = self.head
while p:
print(p.data, end = ',')
p = p.next
print('')
# 取鏈表長(zhǎng)度
def getLength(self):
if self.isEmpty():
exit(0)
p = self.head
length = 0
while p:
length += 1
p = p.next
print('length of the linkedList:', length)
# 在索引值為 index 的節(jié)點(diǎn)后插入節(jié)點(diǎn)key
def insertElem(self, key, index):
p = self.head
j = 1
while p and j < index:
p = p.next
j += 1
if(p == 0 or j > index):
exit(0)
print("insert error!")
node = linkNode(key)
node.next = p.next
p.next = node
print("inserted linkList!")
self.readList()
# 刪除第 index 個(gè)節(jié)點(diǎn)后的那一個(gè)節(jié)點(diǎn)
def deleteElem(self, index):
p = self.head
j = 1
while p and j < index:
p = p.next
j += 1
if (p == 0 or j > index):
exit(0)
print("delete error!")
q = p.next
p.next = q.next
print("delete elem successful!")
self.readList()
# 反轉(zhuǎn)鏈表并輸出反轉(zhuǎn)后鏈表的頭結(jié)點(diǎn)
def reverseLinkedList(self):
pReverseHead = None
pNode = self.head
pPrev = None
# 循環(huán)并反轉(zhuǎn)
while pNode:
pNext = pNode.next # 首先保存pNode原本指向的下一個(gè)節(jié)點(diǎn)陕习,這樣在解除它們指向關(guān)系時(shí)霎褐,原下一個(gè)節(jié)點(diǎn)不會(huì)丟失
# 若pNext == 0, 則說(shuō)明pNone到達(dá)原順序的最后一個(gè)節(jié)點(diǎn),即反轉(zhuǎn)后鏈表的頭結(jié)點(diǎn)
if (pNext == 0):
pReverseHead = pNode
pNode.next = pPrev # 將節(jié)點(diǎn)的next指針指向它的前一個(gè)節(jié)點(diǎn)
pPrev = pNode
pNode = pNext
# 打印反轉(zhuǎn)后的鏈表
print("reversed linkedList:", end = ' ')
p = pReverseHead
while p:
print(p.data, end = ",")
p = p.next
print("")
return pReverseHead
if __name__ == "__main__":
data1 = [1, 2, 3, 4, 5]
data2 = []
linkedList = linkList()
linkedList.initListTail(data1)
linkedList.readList() #輸出結(jié)果為1,2,3,4,5,
linkedList.getLength() #輸出結(jié)果為lenth of the LinkList: 5
linkedList.insertElem(6, 3) #輸出結(jié)果為1,2,3,6,4,5,
linkedList.deleteElem(3) #1,2,3,4,5,
pReverseHead = linkedList.reverseLinkedList() #reversed linkedList: 5,4,3,2,1,
print("pReverseHead = ", pReverseHead.data) # pReverseHead = 5
python3 實(shí)現(xiàn)鏈表的相關(guān)操作
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門(mén)律适,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辐烂,“玉大人遏插,你說(shuō)我怎么就攤上這事∶奕Γ” “怎么了涩堤?”我有些...
- 文/不壞的土叔 我叫張陵眷蜓,是天一觀的道長(zhǎng)分瘾。 經(jīng)常有香客問(wèn)我,道長(zhǎng)吁系,這世上最難降的妖魔是什么德召? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮汽纤,結(jié)果婚禮上上岗,老公的妹妹穿的比我還像新娘。我一直安慰自己蕴坪,他們只是感情好肴掷,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布伴郁。 她就那樣靜靜地躺著俊马,像睡著了一般。 火紅的嫁衣襯著肌膚如雪慨蛙。 梳的紋絲不亂的頭發(fā)上径玖,一...
- 那天痴脾,我揣著相機(jī)與錄音,去河邊找鬼梳星。 笑死赞赖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冤灾。 我是一名探鬼主播前域,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼韵吨!你這毒婦竟也來(lái)了匿垄?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤学赛,失蹤者是張志新(化名)和其女友劉穎年堆,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體盏浇,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡变丧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绢掰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痒蓬。...
- 正文 年R本政府宣布鲁捏,位于F島的核電站芯砸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏给梅。R本人自食惡果不足惜假丧,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望动羽。 院中可真熱鬧包帚,春花似錦、人聲如沸运吓。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拘哨。三九已至谋梭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宅静,已是汗流浹背章蚣。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像磷账,于是被迫代替她去往敵國(guó)和親峭沦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 一、滾動(dòng)操作:scroll 1绰咽、含義理解:滾動(dòng)頁(yè)面菇肃,與坐標(biāo)無(wú)關(guān)系 4、注意事項(xiàng):其他頁(yè)面滾動(dòng)的情況請(qǐng)看源碼示例取募,可...
- 正文之前 今天早上看簡(jiǎn)書(shū)的時(shí)候琐谤,發(fā)現(xiàn)了一個(gè)寫(xiě)的很好的Java實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)的Repo,所以就干脆對(duì)著學(xué)了起來(lái)玩敏。感覺(jué)...
- 俗話說(shuō)眶蕉,一個(gè)好漢十個(gè)幫,眾人拾柴火焰高等都說(shuō)明一個(gè)道理唧躲,有更多的資源造挽,更豐富的積累,都是助你走向成功惊窖,走向頂峰的推...
- 今天將給大家講述鏈表的學(xué)習(xí)心得刽宪。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),毋庸置疑鏈表必須學(xué)好界酒,后面的棧、隊(duì)列嘴秸、樹(shù)毁欣、圖都是以鏈表為基礎(chǔ)的;鏈表...
- 順序表的缺點(diǎn)及解決辦法: 缺點(diǎn): 插入和刪除時(shí)需要移動(dòng)大量元素岳掐,算法時(shí)間復(fù)雜度為O(n)凭疮。 順序線性表長(zhǎng)度變化較大...