算法與數(shù)據(jù)結(jié)構(gòu):鏈表

圖片來自 unsplash

鏈表

鏈表還分為單向鏈表雙向鏈表, 但是這篇文章只說單向鏈表 , 下次再講雙向鏈表 .

鏈表和數(shù)組的區(qū)別 ?

鏈表和數(shù)組在內(nèi)存中的區(qū)別在于 , 數(shù)組的每一個元素的地址是連續(xù)的 , 而鏈表的元素地址是可以不連續(xù)的 .關(guān)于數(shù)組 , 后面的文章也會講到的 .

鏈表的元素,怎么構(gòu)成一個整體 ?

上面說了 , 數(shù)組因為元素地址連續(xù) , 有了起始地址和數(shù)組長度 , 很方便就構(gòu)成了一個數(shù)組結(jié)構(gòu) .

那鏈表的元素地址不連續(xù) , 怎么搞 ?

鏈表內(nèi)部 , 每一個元素 , 我們稱為一個節(jié)點 (Node) , 沒一個節(jié)點內(nèi)部有兩個屬性 , 一個屬性用來存儲當(dāng)前節(jié)點的信息 (item) , 另一個屬性則用來存儲下一個節(jié)點的對象的引用 (next) , 這就相當(dāng)于存儲了下一個節(jié)點的地址 . 所以說,鏈表的最后一個元素的 next 屬性為 null .

方法列表

  • add(Item item) : 添加元素 .
  • get(int index) : 獲取相應(yīng)索引位置的元素 .
  • isEmpty() : 判斷鏈表是否為空 .
  • size() : 返回鏈表長度 .
  • remove(Item item) : 刪除指定的元素 .

Item 是 java 的泛型類型 .

代碼實現(xiàn)

Node 節(jié)點對象

private class Node {

    public Item item = null;
    public Node next = null;

    public Node(Item item) {
        this.item = item;
    }
}

add(Item item)

public void add(Item item) {
    Node node = new Node(item);
    if (this.length == 0) {
        this.head = node;
    } else {
        Node current = this.head;
        while (current.next != null) {
            current = current.next;
        }
        current.next = node;
    }
    this.length++;
}

首先判斷鏈表長度是否為零 , 為 0 就直接把新節(jié)點設(shè)為 head , 如果不為零 , 就遍歷到最后一個節(jié)點 , 并把最后一個節(jié)點的next屬性指向新節(jié)點 .

get(int index)

public Item get(int index) {
    Node current = this.head;
    int i = 0;
    while (i <= index) {
        current = current.next;
        i++;
    }
    return current.item;
}

遍歷鏈表 , 如果給定的索引值超出了鏈表最大索引 , 會直接報錯 .

isEmpty()

public boolean isEmpty() {
    return this.length == 0;
}

判斷鏈表是否為空 , 直接判斷鏈表長度是否為 0 就可以了 .

size()

public int size(){
    return this.length;
}

獲取鏈表長度 , 返回length屬性 .

remove(Item item)

public boolean remove(Item item) {

    if (this.head.item != item) {
        Node current = this.head;
        while (current.next != null) {
            if (current.next.item == item) {
                current.next = current.next.next;
                this.length--;
                return true;
            }
            current = current.next;
        }
        return false;
    }
    this.head = this.head.next;
    this.length--;
    return true;
}

遍歷鏈表 , 每一個鏈表元素的item屬性和給定的item值相比較 , 如果相等 , 將current的上一個元素的next屬性指向current的下一個元素的引用 .

OK! 鏈表 , 到這里就結(jié)束了!!!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市淋叶,隨后出現(xiàn)的幾起案子娄昆,更是在濱河造成了極大的恐慌念逞,老刑警劉巖浮还,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昼榛,死亡現(xiàn)場離奇詭異,居然都是意外死亡忠藤,警方通過查閱死者的電腦和手機阅爽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門路幸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人付翁,你說我怎么就攤上這事』翁” “怎么了百侧?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長能扒。 經(jīng)常有香客問我佣渴,道長,這世上最難降的妖魔是什么初斑? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任辛润,我火速辦了婚禮,結(jié)果婚禮上见秤,老公的妹妹穿的比我還像新娘砂竖。我一直安慰自己,他們只是感情好鹃答,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布乎澄。 她就那樣靜靜地躺著,像睡著了一般测摔。 火紅的嫁衣襯著肌膚如雪置济。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天锋八,我揣著相機與錄音浙于,去河邊找鬼。 笑死挟纱,一個胖子當(dāng)著我的面吹牛羞酗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播樊销,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼整慎,長吁一口氣:“原來是場噩夢啊……” “哼脏款!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起裤园,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤撤师,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拧揽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體剃盾,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年淤袜,在試婚紗的時候發(fā)現(xiàn)自己被綠了痒谴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡铡羡,死狀恐怖积蔚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烦周,我是刑警寧澤尽爆,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站读慎,受9級特大地震影響漱贱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜夭委,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一幅狮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧株灸,春花似錦崇摄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至杏死,卻和暖如春泵肄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背淑翼。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工腐巢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人玄括。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓冯丙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親遭京。 傳聞我的和親對象是個殘疾皇子胃惜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

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