數(shù)數(shù)據(jù)結構入門——大師:鏈表(三)使用 dummyHead

1.為什么用dummyHead虛擬頭結點

對于add操作我們addFirst 總是和其他地方不一樣晚缩,因為頭結點是沒有前一個結點的,因此我們要浪費一個空間使其為dummyHead這樣鏈表總是以nul作為頭結點


    /**
     * 內(nèi)部類node呀闻,只有這個類可以訪問到,用戶不需要知道鏈表內(nèi)部結構,
     * 也可以做成外部類
     */
    private class Node{
        public E e;
        /**
         * 指針 指向下一個節(jié)點
         */
        public Node next;

        public Node(E e,Node next){
            this.e = e;
            this.next = next;
        }

        public Node(E e){
            this(e,null);
        }

        public Node(){
            this(null,null);
        }

        @Override
        public String toString(){
           return e.toString();
        }
    }

2.我們可以對鏈表初始化

//我們將第一個元素作為虛擬頭結點
private Node dummyHead;

private int size;

    public LinkedList(){
        dummyHead = new Node(null, null);
        size = 0;
    }

3.添加元素

    public void add(int index, E e){
        if(index < 0 || index > size){
            throw new IllegalArgumentException("error index");
        }
        Node prev = dummyHead ;
        //從第一個到要找的鏈表前面一個
        for(int i = 0; i <index; i++){
            prev = prev.next;
        }
        Node node = new Node(e);
           node.next = prev.next;
           prev.next = node;
    }

    public void addLast(E e){
        add(size,e);
    }

  
    public void addFirst(E e){
        add(0, e);
    }

這里我們主要add方法中的for循環(huán)為什么循環(huán)到index - 1

  • 這是因為我們有虛擬頭結點,所以當index為0時候我們不需要循環(huán)傀履,prev就是dummyhead 然后進行add操作
  • 如果index 為1的時候我們需要循環(huán)到0處....2時循環(huán)到1處.....這樣每一個prev都是index前的一個結點
  • 同樣有個虛擬頭結點 get操作也很簡單

4.get

 public E get(int index){
        if(index < 0 || index > size){
            throw new IllegalArgumentException("error index");
        }
        Node cur = dummyHead.next;
        for(int i = 0 ; i < index; i++){
            cur = cur.next;
        }
        return  cur.e;
    }

get(index)方法很簡單 我們從虛擬頭結點出發(fā),每次指向的next正好是index處的位置莉炉,因此到index - 1處 cur.next剛好的是需要的元素我們只要 cur = cur.next;即可钓账,同理得first和last很簡單啦

 
    public E getFirst(){
        return get(0);
    }

    public E getLast(){
        return get(size);
    }

5.檢查是否包含

 public boolean contains(E e){
        Node cur = dummyHead.next;
        while (cur!= null){
            if(cur.e.equals(e)){
                return true;
            }
            cur = cur.next;
        }
        return false;
    }

6.鏈表的刪除

思路很簡單 只要找到prev 然后將prev.next = delNode.next 然后delNode.next =null 方便JAVA的垃圾回收即可

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市呢袱,隨后出現(xiàn)的幾起案子官扣,更是在濱河造成了極大的恐慌,老刑警劉巖羞福,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惕蹄,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機卖陵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進店門遭顶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泪蔫,你說我怎么就攤上這事棒旗。” “怎么了撩荣?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵铣揉,是天一觀的道長。 經(jīng)常有香客問我餐曹,道長逛拱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任台猴,我火速辦了婚禮朽合,結果婚禮上,老公的妹妹穿的比我還像新娘饱狂。我一直安慰自己曹步,他們只是感情好,可當我...
    茶點故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布休讳。 她就那樣靜靜地躺著讲婚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪衍腥。 梳的紋絲不亂的頭發(fā)上磺樱,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天,我揣著相機與錄音婆咸,去河邊找鬼竹捉。 笑死,一個胖子當著我的面吹牛尚骄,可吹牛的內(nèi)容都是我干的块差。 我是一名探鬼主播,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼倔丈,長吁一口氣:“原來是場噩夢啊……” “哼憨闰!你這毒婦竟也來了?” 一聲冷哼從身側響起需五,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤鹉动,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宏邮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泽示,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡缸血,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了械筛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捎泻。...
    茶點故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖埋哟,靈堂內(nèi)的尸體忽然破棺而出笆豁,到底是詐尸還是另有隱情,我是刑警寧澤赤赊,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布闯狱,位于F島的核電站,受9級特大地震影響砍鸠,放射性物質發(fā)生泄漏扩氢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一爷辱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朦肘,春花似錦饭弓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至趴生,卻和暖如春阀趴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苍匆。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工刘急, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浸踩。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓叔汁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親检碗。 傳聞我的和親對象是個殘疾皇子据块,可洞房花燭夜當晚...
    茶點故事閱讀 43,687評論 2 351

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