寫在前面玉控,對于python的鏈表并不了解飞主,寫的東西都是東拼西湊,盡量不自相矛盾,大家看個樂呵就行碌识。
不會就學(xué)碾篡,先來粘段百度百科
鏈表,物理存儲單元上非順序的存儲結(jié)構(gòu)
有邏輯順序筏餐,通過指針實現(xiàn)开泽。
但是python沒有指針啊,最初了解鏈表的概念是學(xué)C的時候魁瞪。有困難就要解決困難穆律。(一會說)
先了解一下鏈表的結(jié)構(gòu)
由一系列節(jié)點組成,節(jié)點分為兩個部分导俘,存儲數(shù)據(jù)的數(shù)據(jù)域峦耘,和存儲下一個節(jié)點地址的指針域
打開我的畫板開始創(chuàng)作
黑圈是節(jié)點,紅色是數(shù)據(jù)旅薄,綠色是指針辅髓,指針指向下一個節(jié)點。
然后是自己的一些瞎編的:節(jié)點本身沒有順序赋秀,節(jié)點之間的聯(lián)系依靠指針確定順序利朵。編完了
然后說一下鏈表的好處,如【1,2,3,5,6】猎莲,如果我們想在3和5之間加一個4,需要對整個列表操作(或許吧)
但對于鏈表技即,新建一個4著洼,指針指向5,然后將3的指針指向4而叼,和1256都沒有關(guān)系身笤。
自己理解的也就這些
關(guān)于頭結(jié)點:
數(shù)據(jù)結(jié)構(gòu)中,在單鏈表的第一個結(jié)點之前附設(shè)一個結(jié)點葵陵,它沒有直接前驅(qū)液荸,(就是沒有指向他的節(jié)點)稱之為頭結(jié)點。
頭結(jié)點是鏈表里面第一個結(jié)點脱篙,他的數(shù)據(jù)域可以不存放任何信息(有時候也會存放鏈表的長度等等信息)娇钱,他的指針區(qū)域存放的是鏈表中第一個數(shù)據(jù)元素的結(jié)點(就是傳說中的首元結(jié)點)存放的地址。
防止單鏈表是空的而設(shè)的.當(dāng)鏈表為空的時候,帶頭結(jié)點的頭指針就指向頭結(jié)點.如果當(dāng)鏈表為空的時候,頭結(jié)點的指針域的數(shù)值為NULL.
是為了方便單鏈表的特殊操作,插入在表頭或者刪除第一個結(jié)點.這樣就保持了單鏈表操作的統(tǒng)一性!
單鏈表加上頭結(jié)點之后绊困,無論單鏈表是否為空文搂,頭指針始終指向頭結(jié)點,因此空表和非空表的處理也統(tǒng)一了秤朗,方便了單鏈表的操作煤蹭,也減少了程序的復(fù)雜性和出現(xiàn)bug的機會
單鏈表的多數(shù)操作應(yīng)明確對哪個結(jié)點以及該結(jié)點的前驅(qū)。
然后在看看如何用python模擬鏈表,
按照leetcode的題來看硝皂,定義節(jié)點常挚,定義節(jié)點后定義其數(shù)值域,指針域
做了幾道題有了一些新的理解
鏈表就像是一條鐵鏈稽物,如果是有向的抓住一頭就可以順著這條鐵鏈摸索到下面一個一個的環(huán)奄毡,環(huán)上有著數(shù)據(jù),一個環(huán)勾著一個環(huán)確定了順序姨裸,秧倾;鏈表本質(zhì)上是存儲數(shù)據(jù)的,可以遍歷將數(shù)據(jù)轉(zhuǎn)移到列表上操作(我樂意)傀缩。
可操作的有三個部分那先,節(jié)點,值赡艰,指針售淡。節(jié)點是一個整體(由值和指針組成),值存儲數(shù)據(jù)慷垮,指針表明順序揖闸。
無環(huán)鏈表可以遍歷,末尾節(jié)點無指針,末尾節(jié)點的next就是None料身,用這種方法遍歷
A = list
while A != None:
? ? A = A.next
我們用A完成了鏈表的遍歷汤纸,這時A為最后一節(jié)鏈表,而list還是原先的鏈表芹血。我們也可以對A改變贮泞,別管如何,LIST都是我們手里握著的鐵鏈頭幔烛,左手拿頭啃擦,右手捋鐵鏈(操作)。操作完成返回鐵鏈頭饿悬。
基本就這樣了令蛉,我大致是明白了