讀到了這篇文章,寫的很清晰明了,摘抄下了一些自認為比較清晰明了的部分,然后整理了一下
何為鏈表
鏈式結(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é)點。

注意,鏈表單獨需要一個引用變量,用以表示其第一個結(jié)點。如果某個結(jié)點的next引用為null,則表示鏈表在該結(jié)點處終止
實現(xiàn)一個單向鏈表
插入結(jié)點
可能會在鏈表的任何位置插入一個結(jié)點:在鏈表的首部,或在鏈表中任何內(nèi)部結(jié)點之間,或在鏈表的尾部。
(1)在首部插入結(jié)點
第一步,設(shè)置所添加結(jié)點的next引用,使其指向鏈表中當(dāng)前的第一個結(jié)點。
第二步,重新設(shè)置指向鏈表首部的引用,使其指向這個新添加的結(jié)點。

在鏈表的首部插入一個結(jié)點
注意:如果上述這些步驟顛倒了,則將會遇到困難。如果首先重置front引用,則將失去這個唯一指向現(xiàn)有鏈表的引用,而且再也不能獲取它。
(2)在其他部分插入結(jié)點
首先,設(shè)置新節(jié)點的next引用,使其指向current鎖引用結(jié)點的下一個結(jié)點。然后,重新設(shè)置當(dāng)前結(jié)點的next引用,使其指向這個新的結(jié)點。
在鏈表的中部插入一個結(jié)點

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

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

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