java單向鏈表和雙向鏈表淺析

讀到了這篇文章,寫的很清晰明了,摘抄下了一些自認為比較清晰明了的部分,然后整理了一下

何為鏈表

鏈式結(jié)構(gòu)是一種使用對象引用變量來創(chuàng)建對象間的鏈的數(shù)據(jù)結(jié)構(gòu)。
對象引用變量可用于創(chuàng)建鏈式結(jié)構(gòu)
對象引用變量所存儲的特定地址一般無關(guān)緊要。換句話說,重要的是能夠使用引用變量來訪問對象,而對象在內(nèi)存中的特定存儲位置并不重要。因此,我們一般將引用變量描述為一個“指向”對象的名稱,而不是顯示其地址,按照這種理解,引用變量有時稱為“指針”,我個人理解為內(nèi)存的地址值

//這就是一個鏈式結(jié)構(gòu)
public class Person {
    private String name;
    private String address;
    private Person next;    // Person對象的引用
}

這種類型的對象有時稱為自引用對象。
這種關(guān)系構(gòu)成了鏈表的基礎(chǔ)。鏈表是一種鏈式結(jié)構(gòu),該結(jié)構(gòu)中的每個對象都指向下一個對象,從而構(gòu)成了鏈表中對象的線性次序。。鏈表中存儲的對象一般稱為鏈表的節(jié)點。


image.png

注意,鏈表單獨需要一個引用變量,用以表示其第一個結(jié)點。如果某個結(jié)點的next引用為null,則表示鏈表在該結(jié)點處終止

實現(xiàn)一個單向鏈表

插入結(jié)點

可能會在鏈表的任何位置插入一個結(jié)點:在鏈表的首部,或在鏈表中任何內(nèi)部結(jié)點之間,或在鏈表的尾部。
(1)在首部插入結(jié)點
第一步,設(shè)置所添加結(jié)點的next引用,使其指向鏈表中當(dāng)前的第一個結(jié)點。
第二步,重新設(shè)置指向鏈表首部的引用,使其指向這個新添加的結(jié)點。

image.png

在鏈表的首部插入一個結(jié)點
注意:如果上述這些步驟顛倒了,則將會遇到困難。如果首先重置front引用,則將失去這個唯一指向現(xiàn)有鏈表的引用,而且再也不能獲取它。

(2)在其他部分插入結(jié)點
首先,設(shè)置新節(jié)點的next引用,使其指向current鎖引用結(jié)點的下一個結(jié)點。然后,重新設(shè)置當(dāng)前結(jié)點的next引用,使其指向這個新的結(jié)點。

在鏈表的中部插入一個結(jié)點

image.png

刪除結(jié)點

對鏈表中的第一個結(jié)點的處理一般也比較特殊。
要刪除鏈表的第一個結(jié)點,則要重新設(shè)置指向鏈表首部的引用,使其指向鏈表中當(dāng)前的第二個結(jié)點。
刪除鏈表的第一個結(jié)點

image.png

一旦找到索要刪除的結(jié)點,則重新設(shè)置前一個結(jié)點的next引用,使其指向的結(jié)點與當(dāng)前結(jié)點的next引用所指向的結(jié)點相同。然后,可以根據(jù)需要使用這個刪除的結(jié)點。

刪除鏈表內(nèi)部結(jié)點

image.png

實現(xiàn)一個雙向鏈表

雙鏈表(雙向鏈表):雙鏈表和單鏈表相比,多了一個指向尾指針(tail),雙鏈表的每個結(jié)點都有一個頭指針head和尾指針tail,雙鏈表相比單鏈表更容易操作,雙鏈表結(jié)點的首結(jié)點的head指向為null,tail指向下一個節(jié)點的tail;尾結(jié)點的head指向前一個結(jié)點的head,tail 指向為null,是雙向的關(guān)系;


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容