數(shù)據(jù)結(jié)構(gòu)-單向鏈表

單向鏈表的結(jié)構(gòu)

單向鏈表.png

Node節(jié)點

static class Node<E> {
    E element;
    Node<E> next;
    public Node(E element, Node<E> next) {
        this.element = element;
        this.next = next;
    }
}

根據(jù)index獲取節(jié)點

private Node<E> node(int index) {
    rangeCheckFor(index);
    Node<E> node = first;
    for (int i = 0; i < index; i++) {
        node = node.next;
    }
    return node;
}

添加

public void add(int index, E element) {
    rangeCheckForAdd(index);
    if (index == 0) {
       first = new Node<>(element, first);
    } else {
        Node<E> node = node(index - 1);
        node.next = new Node<>(element, node.next);
    }
    size++;
}

刪除

public E remove(int index) {
    rangeCheckFor(index);
    Node<E> node = first;
    if (index == 0) {
        first = first.next;
    } else {
        Node<E> pre = node(index - 1);
        node = pre.next;
        pre.next = node.next;
    }
    size--;
    return node.element;
}

獲取index位置的元素

public int indexOf(E element) {
    Node<E> node = first;
    if (element == null) {
        for (int i = 0; i < size; i++) {
            if (node.element == null) { return i; }
            node = node.next;
        }
    } else {
       for (int i = 0; i < size; i++) {
           if (element.equals(node.element)) { return i; }
           node = node.next;
       }
    }
    return ELEMENT_NOT_FOUND;
}

清空

 public void clear() {
    first = null;
    size = 0;
}

虛擬頭節(jié)點的單向鏈表

  • 觀察代碼我們發(fā)現(xiàn)很多時候我們都需要針對頭節(jié)點做單獨處理
  • 為了減少代碼的復(fù)雜度 我們可以加一個虛擬頭節(jié)點
  • 添加 刪除邏輯會簡化不少
public SingleLinkedList() {
    first = new Node<>(null, null);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锅风,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子饰潜,更是在濱河造成了極大的恐慌,老刑警劉巖栈雳,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贬派,死亡現(xiàn)場離奇詭異,居然都是意外死亡棵介,警方通過查閱死者的電腦和手機喘蟆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門缓升,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蕴轨,你說我怎么就攤上這事港谊。” “怎么了橙弱?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵歧寺,是天一觀的道長燥狰。 經(jīng)常有香客問我,道長斜筐,這世上最難降的妖魔是什么龙致? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮顷链,結(jié)果婚禮上目代,老公的妹妹穿的比我還像新娘。我一直安慰自己嗤练,他們只是感情好榛了,可當(dāng)我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著煞抬,像睡著了一般霜大。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上革答,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天战坤,我揣著相機與錄音,去河邊找鬼蝗碎。 笑死湖笨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蹦骑。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼臀防,長吁一口氣:“原來是場噩夢啊……” “哼眠菇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起袱衷,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤捎废,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后致燥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體登疗,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年嫌蚤,在試婚紗的時候發(fā)現(xiàn)自己被綠了辐益。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡脱吱,死狀恐怖智政,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情箱蝠,我是刑警寧澤续捂,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布垦垂,位于F島的核電站,受9級特大地震影響牙瓢,放射性物質(zhì)發(fā)生泄漏劫拗。R本人自食惡果不足惜败匹,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一戚宦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恢口,春花似錦聂渊、人聲如沸差购。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欲逃。三九已至,卻和暖如春饼暑,著一層夾襖步出監(jiān)牢的瞬間稳析,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工弓叛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留彰居,地道東北人。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓撰筷,卻偏偏與公主長得像陈惰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子毕籽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,860評論 2 361

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