微博分享的網(wǎng)站怎么做亞洲衛(wèi)星電視網(wǎng)參數(shù)表
為什么需要手寫實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)?
其實(shí)技術(shù)的本身就是基礎(chǔ)的積累和搭建的過程,基礎(chǔ)扎實(shí) 地基平穩(wěn) 萬丈高樓才會(huì)久戰(zhàn)不衰,做技術(shù)能一通百,百通千就不怕有再難得技術(shù)了。
一:鏈表的分類
主要有單向,雙向和循環(huán)鏈表的展示形式。
1:單向鏈表
單鏈表包含具有數(shù)據(jù)字段的節(jié)點(diǎn)以及指向節(jié)點(diǎn)行中的下一個(gè)節(jié)點(diǎn)的“下一個(gè)”字段。可以對(duì)單鏈表執(zhí)行的操作包括插入、刪除和遍歷。
2:雙向鏈表
在“雙向鏈表”中,除了下一個(gè)節(jié)點(diǎn)鏈接之外,每個(gè)節(jié)點(diǎn)還包含指向序列中“前一個(gè)”節(jié)點(diǎn)的第二個(gè)鏈接字段。這兩個(gè)鏈接可以稱為’前‘ 和’后’,或’下’和’上’。
3:循環(huán)列表
在列表的最后一個(gè)節(jié)點(diǎn)中,鏈接字段通常包含一個(gè)空引用,一個(gè)特殊的值用于指示缺少進(jìn)一步的節(jié)點(diǎn)。一個(gè)不太常見的約定是讓它指向列表的第一個(gè)節(jié)點(diǎn)。在這種情況下,列表被稱為“循環(huán)”或“循環(huán)鏈接”;否則,它被稱為“開放”或“線性”。它是一個(gè)列表,其中最后一個(gè)指針指向第一個(gè)節(jié)點(diǎn)。
所以我們?cè)趯W(xué)習(xí)的過程中,以使用 Java 程序員本身常用的語言來分析學(xué)習(xí),并通過簡(jiǎn)化結(jié)構(gòu)的方式把 LinkedList 手寫實(shí)現(xiàn),讓友友們更能方便的理解鏈表。
以下為實(shí)戰(zhàn)過程
A:鏈表的節(jié)點(diǎn)
鏈表的數(shù)據(jù)結(jié)構(gòu)核心根基就在于節(jié)點(diǎn)對(duì)象的使用,并在節(jié)點(diǎn)對(duì)象中關(guān)聯(lián)當(dāng)前節(jié)點(diǎn)的上一個(gè)和下一個(gè)節(jié)點(diǎn)。通過這樣的方式構(gòu)建出鏈表結(jié)構(gòu)。
但也因?yàn)樵阪湵砩咸砑用總€(gè)元素的時(shí)候,都需要?jiǎng)?chuàng)建新的 Node 節(jié)點(diǎn),所以這也是一部分耗時(shí)的操作
B:頭插節(jié)點(diǎn)
B1.1:先把頭節(jié)點(diǎn)記錄下來。之后創(chuàng)建一個(gè)新的節(jié)點(diǎn),新的節(jié)點(diǎn)構(gòu)造函數(shù)的頭節(jié)點(diǎn)入?yún)閚ull,通過這樣的方式構(gòu)建出一個(gè)新的頭節(jié)點(diǎn)。
B1.2:原來的頭結(jié)點(diǎn),設(shè)置 f.prev 連接到新的頭節(jié)點(diǎn),這樣的就可以完成頭插的操作了。
C: 尾插節(jié)點(diǎn)
尾差節(jié)點(diǎn)與頭插節(jié)點(diǎn)正好相反,通過記錄當(dāng)前的結(jié)尾節(jié)點(diǎn),創(chuàng)建新的節(jié)點(diǎn),并把當(dāng)前的結(jié)尾節(jié)點(diǎn),通過 l.next 關(guān)聯(lián)到新創(chuàng)建的節(jié)點(diǎn)上。
D:拆鏈操作
此方法比較難懂 給大家上圖
unlink 是一種拆鏈操作,只要你給定一個(gè)元素,它就可以把當(dāng)前這個(gè)元素的上一個(gè)節(jié)點(diǎn)和一個(gè)節(jié)點(diǎn)進(jìn)行相連,之后把自己拆除。
這個(gè)方法常用于 remove 移除元素操作,因?yàn)檎麄€(gè)操作過程不需要遍歷,拆除元素后也不需要復(fù)制新的空間,所以時(shí)間復(fù)雜讀為 O(1)
E:刪除元素
刪除元素的過程需要 for 循環(huán)判斷比刪除元素的值,找到對(duì)應(yīng)的元素,進(jìn)行刪除。
最后測(cè)試用例走一波
附贈(zèng)經(jīng)典面試題:
描述一下鏈表的數(shù)據(jù)結(jié)構(gòu)?
Java 中 LinkedList 使用的是單向鏈表、雙向鏈表還是循環(huán)鏈表?
鏈表中數(shù)據(jù)的插入、刪除、獲取元素,時(shí)間復(fù)雜度是多少?
什么場(chǎng)景下使用鏈表更合適?
友友們?cè)谠u(píng)論區(qū)寫下你們的答案!
以上的是線性數(shù)據(jù)結(jié)構(gòu)-手寫鏈表-LinkList 若需完整代碼 可識(shí)別二維碼后 給您發(fā)代碼。