成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java數(shù)據(jù)結(jié)構(gòu)與算法——鏈表(面試)

keke / 1008人閱讀

摘要:前言數(shù)據(jù)結(jié)構(gòu)與算法專題會不定時更新,歡迎各位讀者監(jiān)督。指針反轉(zhuǎn)實現(xiàn)鏈表反轉(zhuǎn)代碼反轉(zhuǎn)鏈表獲取當(dāng)前下下個元素測試代碼部分用到了上篇文章數(shù)據(jù)結(jié)構(gòu)與算法鏈表的代碼段,請移步獲取。

聲明:碼字不易,轉(zhuǎn)載請注明出處,歡迎文章下方討論交流。

前言:Java數(shù)據(jù)結(jié)構(gòu)與算法專題會不定時更新,歡迎各位讀者監(jiān)督。本文是上篇文章Java數(shù)據(jù)結(jié)構(gòu)與算法——鏈表的擴展篇,介紹鏈表的特點,使用場景、鏈表的性能分析以及一道經(jīng)典的鏈表面試題——鏈的反轉(zhuǎn)問題

1.鏈表的特點
1)物理空間不連續(xù),開銷大

鏈表由于其特殊的存儲結(jié)構(gòu),其物理存儲空間不連續(xù),因此需要額外的信息(指針)標(biāo)記下一節(jié)點的地址,優(yōu)點是可利用操作系統(tǒng)的動態(tài)內(nèi)存管理,缺點除存儲數(shù)據(jù)本身之外需要額外的開銷存放指針。

2)運行時可以動態(tài)添加

和數(shù)組不同,鏈表可以動態(tài)的添加元素和刪除元素,彌補了數(shù)組的缺陷

3)查找慢,增刪快

很顯然,查找需要遍歷,最差的情況如果查找最后一個,則比較低效特別是鏈表比較長的時候。鏈表的增刪只需要操作指針即可,相比數(shù)組比較高效

2.鏈表的適用場景

增刪頻繁的場合(隨著計算機技術(shù)的發(fā)展,空間已經(jīng)不再是主要矛盾,時間效率才是)
如果同時存在即增刪又查找的場合,一般鏈表會配合散列表、棧、隊列一起使用。

3.鏈表性能分析

鏈表的插入分為頭插入、尾插入中間插入,頭和尾的時間復(fù)雜度尾O(1),而中間插入需要遍歷,所以時間復(fù)雜度尾O(L),L為鏈表長度。

同樣刪除也分為頭刪除尾刪除、中間刪除,頭刪除的時間復(fù)雜度是O(1),中間刪除和尾刪除由于需要遍歷鏈表,所以時間復(fù)雜度為O(L),L為鏈表長度。

鏈表的查找,由于需要遍歷,所以時間復(fù)雜度為O(L),L為鏈表長度。

4. 一道面試題——如何實現(xiàn)鏈表反轉(zhuǎn)

這是一道面試中經(jīng)常出現(xiàn)的題,一般在面試中要求盡量不用額外的空間實現(xiàn)。方法有很多,比如遍歷鏈表,然后依次使用頭插入的方式。還有一種方法,就是把鏈表的每個指針反轉(zhuǎn)。

4.1 指針反轉(zhuǎn)實現(xiàn)鏈表反轉(zhuǎn)代碼
    /**
     * 反轉(zhuǎn)鏈表
     */
    public void lindRevese(){
        Node temp = first;
        last = temp;
        Node next = first.getNext();
        for (int i = 0; i < size-1; i++) {
            Node nextNext = next.getNext(); //獲取當(dāng)前下下個元素
            next.setNext(temp);
            temp = next;
            next = nextNext;
        }
        last.setNext(null);
        first = temp;
    }
4.2 測試
public class LinkReverse {
    public static void main(String[] args) {
        Link link = new Link();
        link.add(0,1); //1
        link.add(1,2); //1->2
        link.add(2,3); //1->2->3
        link.add(3,4); //1->2->3->4
        link.add(4,5); //1->2->3->4->5
        link.printLink();//1->2->3->4->5
        link.lindRevese();
        link.printLink();//5->4->3->2->1
    }    
}

代碼部分用到了上篇文章Java數(shù)據(jù)結(jié)構(gòu)與算法——鏈表的代碼段,請移步獲取。

碼字不易,如對您有幫助,歡迎點贊收藏打賞^_^

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71038.html

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu) - 收藏集 - 掘金

    面試舊敵之紅黑樹(直白介紹深入理解) - Android - 掘金 讀完本文你將了解到: 什么是紅黑樹 黑色高度 紅黑樹的 5 個特性 紅黑樹的左旋右旋 指定節(jié)點 x 的左旋 右圖轉(zhuǎn)成左圖 指定節(jié)點 y 的右旋左圖轉(zhuǎn)成右圖 紅黑樹的平衡插入 二叉查找樹的插入 插入后調(diào)整紅黑樹結(jié)構(gòu) 調(diào)整思想 插入染紅后... java 多線程同步以及線程間通信詳解 & 消費者生產(chǎn)者模式 & 死鎖 & Thread...

    leeon 評論0 收藏0
  • Java數(shù)據(jù)結(jié)構(gòu)算法——鏈表

    摘要:前言數(shù)據(jù)結(jié)構(gòu)與算法專題會不定時更新,歡迎各位讀者監(jiān)督。本文介紹另一種數(shù)據(jù)結(jié)構(gòu)鏈表,包括鏈表的特點特點鏈表的創(chuàng)建刪除插入和輸出,文末給出代碼和一道常見的關(guān)于鏈表的面試題。 聲明:碼字不易,轉(zhuǎn)載請注明出處,歡迎文章下方討論交流。 前言:Java數(shù)據(jù)結(jié)構(gòu)與算法專題會不定時更新,歡迎各位讀者監(jiān)督。本文介紹另一種數(shù)據(jù)結(jié)構(gòu)——鏈表,包括鏈表的特點特點、鏈表的創(chuàng)建、刪除、插入和輸出,文末給出java...

    CKJOKER 評論0 收藏0
  • 這幾道Java集合框架面試題在面試中幾乎必問

    摘要:若遇到哈希沖突,則將沖突的值加到鏈表中即可。之后相比于之前的版本,之后在解決哈希沖突時有了較大的變化,當(dāng)鏈表長度大于閾值默認為時,將鏈表轉(zhuǎn)化為紅黑樹,以減少搜索時間。有序,唯一紅黑樹自平衡的排序二叉樹。 本文是最最最常見Java面試題總結(jié)系列第三周的文章。主要內(nèi)容: Arraylist 與 LinkedList 異同 ArrayList 與 Vector 區(qū)別 HashMap的底層...

    bigdevil_s 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<