摘要:前言數據結構與算法專題會不定時更新,歡迎各位讀者監督。指針反轉實現鏈表反轉代碼反轉鏈表獲取當前下下個元素測試代碼部分用到了上篇文章數據結構與算法鏈表的代碼段,請移步獲取。
聲明:碼字不易,轉載請注明出處,歡迎文章下方討論交流。
前言:Java數據結構與算法專題會不定時更新,歡迎各位讀者監督。本文是上篇文章Java數據結構與算法——鏈表的擴展篇,介紹鏈表的特點,使用場景、鏈表的性能分析以及一道經典的鏈表面試題——鏈的反轉問題
1.鏈表的特點鏈表由于其特殊的存儲結構,其物理存儲空間不連續,因此需要額外的信息(指針)標記下一節點的地址,優點是可利用操作系統的動態內存管理,缺點除存儲數據本身之外需要額外的開銷存放指針。
和數組不同,鏈表可以動態的添加元素和刪除元素,彌補了數組的缺陷
很顯然,查找需要遍歷,最差的情況如果查找最后一個,則比較低效特別是鏈表比較長的時候。鏈表的增刪只需要操作指針即可,相比數組比較高效
2.鏈表的適用場景增刪頻繁的場合(隨著計算機技術的發展,空間已經不再是主要矛盾,時間效率才是)
如果同時存在即增刪又查找的場合,一般鏈表會配合散列表、棧、隊列一起使用。
鏈表的插入分為頭插入、尾插入、中間插入,頭和尾的時間復雜度尾O(1),而中間插入需要遍歷,所以時間復雜度尾O(L),L為鏈表長度。
同樣刪除也分為頭刪除、尾刪除、中間刪除,頭刪除的時間復雜度是O(1),中間刪除和尾刪除由于需要遍歷鏈表,所以時間復雜度為O(L),L為鏈表長度。
鏈表的查找,由于需要遍歷,所以時間復雜度為O(L),L為鏈表長度。
4. 一道面試題——如何實現鏈表反轉這是一道面試中經常出現的題,一般在面試中要求盡量不用額外的空間實現。方法有很多,比如遍歷鏈表,然后依次使用頭插入的方式。還有一種方法,就是把鏈表的每個指針反轉。
/** * 反轉鏈表 */ public void lindRevese(){ Node temp = first; last = temp; Node next = first.getNext(); for (int i = 0; i < size-1; i++) { Node nextNext = next.getNext(); //獲取當前下下個元素 next.setNext(temp); temp = next; next = nextNext; } last.setNext(null); first = temp; }
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數據結構與算法——鏈表的代碼段,請移步獲取。
碼字不易,如對您有幫助,歡迎點贊收藏打賞^_^
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71038.html
面試舊敵之紅黑樹(直白介紹深入理解) - Android - 掘金 讀完本文你將了解到: 什么是紅黑樹 黑色高度 紅黑樹的 5 個特性 紅黑樹的左旋右旋 指定節點 x 的左旋 右圖轉成左圖 指定節點 y 的右旋左圖轉成右圖 紅黑樹的平衡插入 二叉查找樹的插入 插入后調整紅黑樹結構 調整思想 插入染紅后... java 多線程同步以及線程間通信詳解 & 消費者生產者模式 & 死鎖 & Thread...
摘要:前言數據結構與算法專題會不定時更新,歡迎各位讀者監督。本文介紹另一種數據結構鏈表,包括鏈表的特點特點鏈表的創建刪除插入和輸出,文末給出代碼和一道常見的關于鏈表的面試題。 聲明:碼字不易,轉載請注明出處,歡迎文章下方討論交流。 前言:Java數據結構與算法專題會不定時更新,歡迎各位讀者監督。本文介紹另一種數據結構——鏈表,包括鏈表的特點特點、鏈表的創建、刪除、插入和輸出,文末給出java...
摘要:若遇到哈希沖突,則將沖突的值加到鏈表中即可。之后相比于之前的版本,之后在解決哈希沖突時有了較大的變化,當鏈表長度大于閾值默認為時,將鏈表轉化為紅黑樹,以減少搜索時間。有序,唯一紅黑樹自平衡的排序二叉樹。 本文是最最最常見Java面試題總結系列第三周的文章。主要內容: Arraylist 與 LinkedList 異同 ArrayList 與 Vector 區別 HashMap的底層...
閱讀 3222·2021-11-11 16:55
閱讀 2458·2021-10-13 09:39
閱讀 2392·2021-09-13 10:27
閱讀 2155·2019-08-30 15:55
閱讀 3083·2019-08-30 15:54
閱讀 3127·2019-08-29 16:34
閱讀 1819·2019-08-29 12:41
閱讀 1065·2019-08-29 11:33