鏈表

鏈表通過(guò)指針將零散的數(shù)據(jù)塊連接在一起,這些內(nèi)存塊被稱(chēng)為節(jié)點(diǎn)(Node)。通常每個(gè)節(jié)點(diǎn)除了儲(chǔ)存數(shù)據(jù)之外還記錄下一個(gè)節(jié)點(diǎn)的地址。

//Node類(lèi)是LinkedList類(lèi)的內(nèi)部類(lèi)裁着,泛型E定義在LinkedList上
class Node {
    E e;        //數(shù)據(jù)域
    Node next;  //下一個(gè)節(jié)點(diǎn)
    
    Node() {
        this(null, null);
    }
    
    Node(E e) {
        this(e, null);
    }
    
    Node(E e, Node next) {
        this.e = e;
        this.next = next;
    }
}

與數(shù)組相比,數(shù)組的存儲(chǔ)空間是連續(xù)的拱她。因此為了保證數(shù)組的存儲(chǔ)空間的連續(xù)性二驰,需要搬移節(jié)點(diǎn)。而鏈表的各個(gè)節(jié)點(diǎn)是由指針串聯(lián)起來(lái)的秉沼,插入和刪除時(shí)只需維護(hù)指針即可桶雀,這樣的時(shí)間復(fù)雜度為O(1)。

單鏈表LinkedList

設(shè)置虛擬頭結(jié)點(diǎn)(哨兵)方便實(shí)現(xiàn)統(tǒng)一的邏輯代碼唬复,哨兵節(jié)點(diǎn)不存儲(chǔ)數(shù)據(jù)矗积。無(wú)論鏈表是否為空,head指針都會(huì)指向它敞咧,作為鏈表的頭結(jié)點(diǎn)始終存在棘捣。下面是LinkedList的兩個(gè)成員變量

private Node dummyHead;     //哨兵
private int size;

//構(gòu)造器初始化
public LinkedList() {
    dummyHead = new Node();
    size = 0;
}

鏈表的重要操作

  1. add(int index, E e):在index位置插入元素e

    public viod add(int index, E e) {
        Node prev = dummyHead;
        
        //指針移動(dòng)到目標(biāo)節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)上
        for(int i = 0; i < index; i ++) {
            prev = prev.next;
        }
        
        //修改指針的指向
        //Node newNode = new Node(e);
        //newNode.next = prev.next;
        //prev.next = newNode;
        
        //上面的三行合并成一行
        prev.next = new Node(e, prev.next);
        
        size ++;
    }
    
  2. removeElement(E e):移除指定的元素e

    public void removeElement(E e) {
        Node prev = dummyHead;
        
        while(prev.next != null) {
            if(prev.next.e.equals(e)) {
                //在找到目標(biāo)元素的前一個(gè)節(jié)點(diǎn)處停止
                break;
            }
            prev = prev.next;
        }
        if(prev.next != null) {
            prev.next = prev.next.next;
        }
    }
    
  3. remove(int index):移除指定位置上的元素,并返回該元素

    public E remove(int index) {
        Node prev = dummyHead;
        
        //在找到目標(biāo)元素的前一個(gè)節(jié)點(diǎn)處停止
        for(int i = 0; i < index; i ++) {
            prev = prev.next;
        }
        
        //記錄節(jié)點(diǎn)休建,用于返回
        Node retNode = prev.next;
        //修改指針
        prev.next = retNode.next;
        //銷(xiāo)毀被刪元素
        retNode.next = null;
       
        size --;
        
        return retNode.e;
    }
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末乍恐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子测砂,更是在濱河造成了極大的恐慌茵烈,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砌些,死亡現(xiàn)場(chǎng)離奇詭異瞧毙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)寄症,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)宙彪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人有巧,你說(shuō)我怎么就攤上這事释漆。” “怎么了篮迎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵男图,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我甜橱,道長(zhǎng)逊笆,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任岂傲,我火速辦了婚禮难裆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘镊掖。我一直安慰自己乃戈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布亩进。 她就那樣靜靜地躺著症虑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪归薛。 梳的紋絲不亂的頭發(fā)上谍憔,一...
    開(kāi)封第一講書(shū)人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音主籍,去河邊找鬼习贫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛崇猫,可吹牛的內(nèi)容都是我干的沈条。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼诅炉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蜡歹!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起涕烧,我...
    開(kāi)封第一講書(shū)人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤月而,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后议纯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體父款,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了憨攒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片世杀。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖肝集,靈堂內(nèi)的尸體忽然破棺而出瞻坝,到底是詐尸還是另有隱情,我是刑警寧澤杏瞻,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布所刀,位于F島的核電站,受9級(jí)特大地震影響捞挥,放射性物質(zhì)發(fā)生泄漏浮创。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一砌函、第九天 我趴在偏房一處隱蔽的房頂上張望斩披。 院中可真熱鬧,春花似錦胸嘴、人聲如沸雏掠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)乡话。三九已至,卻和暖如春耳奕,著一層夾襖步出監(jiān)牢的瞬間绑青,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工屋群, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闸婴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓芍躏,卻偏偏與公主長(zhǎng)得像邪乍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子对竣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 什么是數(shù)組庇楞? 數(shù)組簡(jiǎn)單來(lái)說(shuō)就是將所有的數(shù)據(jù)排成一排存放在系統(tǒng)分配的一個(gè)內(nèi)存塊上,通過(guò)使用特定元素的索引作為數(shù)組的下...
    啟明_b56f閱讀 892評(píng)論 0 0
  • 鏈表 概念 說(shuō)到鏈表否纬,coder們都不會(huì)陌生吕晌,在日常開(kāi)發(fā)中或多或少都會(huì)用到它。它是鏈?zhǔn)酱鎯?chǔ)的線(xiàn)性表临燃,簡(jiǎn)稱(chēng)鏈表睛驳。鏈表...
    扈扈哈嘿閱讀 2,077評(píng)論 0 5
  • 這次是自己閱讀JDK源碼得到的一些頓悟烙心,java集合類(lèi)LinkList是數(shù)據(jù)結(jié)構(gòu)鏈表的實(shí)現(xiàn)。 LinkedList...
    Undo_0cc6閱讀 688評(píng)論 0 0
  • 有頭鏈表(注意:頭結(jié)點(diǎn)有的地方是全局變量) 初學(xué)者學(xué)自于大話(huà)數(shù)據(jù)結(jié)構(gòu)乏沸,不足及錯(cuò)誤的地方請(qǐng)讀者提出來(lái)淫茵,謝謝。 可加 ...
    lxr_閱讀 789評(píng)論 0 2
  • LinkedList的源碼解析 public class LinkedList<E> extends Abstra...
    阿大乾JTR閱讀 398評(píng)論 0 0