LinkedList與鏈表(單向)(Java實現)

引入鏈表結構:

ArrayList任意位置插入或者刪除元素時,就需要將后序元素整體往前或者往后
搬移,時間復雜度為O(n),效率比較低,因此ArrayList不適合做任意位置插入和刪除比較多的場景。因此:java集合中又引入了LinkedList,即鏈表結構。

一:鏈表

鏈表是一種物理存儲結構上非連續存儲結構,數據元素的邏輯順序是通過鏈表中的引用鏈接次序實現的 。

1:結構:

?鏈表中的元素可以抽象為對象,每一個對象包含一個val值與next值,next就是指向下一個節點的地址。,這樣就實現了雖然物理上不連續,但是邏輯上實現了連續。

?

演示:?

?鏈表結構一共8中,分別是:

單向? 帶頭? 非循環? ? ?單向? 不帶頭? 非循環? ? ? ? ? ? ? 雙向? 不帶頭? 非循環? ?雙向? 不帶頭? 循環?

?單向? 帶頭? 循環? ? ? ?單向? 不帶頭? ? 循環? ? ? ? ? ? ??雙向? ? 帶頭? 非循環? ??雙向? ? 帶頭? ? ?循環?

2:實現:

?對鏈表的增刪該查方法進行手動實現:

將鏈表抽象為對象,每一個對象中都包含一個val值與next值,將val與next初始化為內部類的成員屬性,通過構造方法對傳輸的val值進行初始化,這樣傳輸的val值就帶有一個next屬性,成為了一個對象。

代碼解釋:?

? next?是一個指向同類對象的引用

? ? ? 1: 它存儲內存中下一個節點對象的內存地址

? ? ? 2: 類型為 ListNode?表示它只能指向另一個 ListNode?類型的對象

? ? ? 3: 最后一個節點的?next?通常設為?null(表示鏈表結束

? public?ListNode head;?的含義:

? 1:head:變量名,表示鏈表的頭節點(鏈表的起始點)

? ? ?2:返回ListNode對象,相當于這個head是一個ListNode對象,包含val屬性與next屬性(鏈? ? ? ? ? ? ? ?表由節點組成,頭節點是鏈表的起點

? ListNode?作為返回類型意味著什么?

? ? 1:? 返回的是對ListNode?對象的引用(reference)

? ? 2 : 引用本質上是對象的句柄,包含:

? ? ? ? ? ? ?2.1 對象的內存地址(但 Java 不直接暴露地址)

? ? ? ? ? ? ?2.2?通過引用可以訪問對象的完整狀態(字段)和行為(方法)

? ? ? 初始化對象:

? ? ? ? 當使用?new Node(value)?時:new?操作符在堆內存中分配空間創建新對象 → 生成新地址

? ? ? ?然后調用構造方法初始化對象狀態

? ? ? ?最后返回該對象的引用(地址)??

?

?2.1:創建一個鏈表

ListNode node=new ListNode(val):?調用ListNode內部類,傳入val值,然后調用構造方法初始化對象,最后形成鏈表(對象)。

2.2:display(打印鏈表)

2.3:size(鏈表長度)?

逐一遍歷直到cur為null,也就是遍歷完最后一個節點,最后一個節點的next的節點為null時,停止遍歷,返回len。

2.4:findNodeOfKey(查找)

遍歷cur,直到cur的val為key時,返回cur。

圖示:?

2.5: remove(刪除一個指定元素)

首先保證存在鏈表,如果要刪除的key值為頭節點,然后使head節點指向下一個節點,如果不是頭節點則執行邏輯代碼,先找到要刪除節點的前一個節點,然后del保存為要刪除節點的下一個節點,使cur.next指向要刪除節點的下一個節點,這樣要刪除的節點直接被跳過了。

圖示展示:?

2.6:removeAllKey(刪除所有為key值的節點)

如果要刪除的節點正好是head節點指向的下一個節點,那么執行if語句,刪除(跳過)這個節點,使head指向它的next.next的節點,然后prev指向此時的cur,也就是被跳過的節點,然后cur指向cur的下一個節點,循環執行,如果要刪除的節點包含頭節點,那么最后刪除(跳過)頭節點,最后處理,不要先處理。

?

2.7:clear(刪除所有節點)

刪除所有節點可以直接將head==null這樣鏈表就沒有了頭,其他節點也就自動被清理了。

也可以一個一個的將節點置為null。

?2.8:addFirst(頭插)

將傳輸的data初始化為節點對象,調用構造方法,生成node對象,然后將node的下一個節點指向head節點,此時head節點使第二個節點,最后再將head置為第一個節點指向node。

2.9:addLast(尾插法)?

同理,生成node對象,先遍歷到最后一個節點,然后將node插入到最后,此時cur==null,然后將cur.next=node,這樣就再最后插入了node。

2.10:addIndext(在任意位置插入)?

首先確保插入位置合法,不超過鏈表的長度,也不為負數,也就是在index位置插入data值,那么cur需要走到index節點的前一個節點,也就是要走index-1步

2.11:contain(包含某個節點)?

遍歷cur,從頭節點開始,直到找到key的值,找到返回true,沒有找到返回false

物理連續與邏輯連續:

  • 物理存儲結構:指的是數據元素(節點)實際在計算機內存(或存儲介質)中占據的位置。

      • 物理上連續的存儲結構:?最典型的例子就是數組

        • 如何連續:?當你創建一個數組(例如?int arr[10];)時,操作系統或運行環境會在內存中找出一塊連續的空閑區域,大小剛好能容納10個整數(假設每個int占4字節,就是40字節的連續空間)。

        • 地址關系:?數組的第一個元素?arr[0]?占據某個起始地址(比如?0x1000),那么?arr[1]?緊挨著它,地址是?0x1004(假設int是4字節),arr[2]?在?0x1008,以此類推,直到?arr[9]?在?0x1024。這些元素的內存地址在數值上是連續的、緊密相鄰的

        • 特點:?知道第一個元素的地址和每個元素的大小,就能通過簡單的算術運算(起始地址 + 索引 * 元素大小直接計算出任何一個元素的物理地址,實現快速隨機訪問(O(1)時間復雜度)。

      • 物理上非連續的存儲結構:?最典型的例子就是鏈表

        • 如何非連續:?當你創建鏈表的節點時,每次創建一個新節點(Node),系統只是在當前可用的任意空閑內存位置分配空間給這個節點。它完全不關心之前創建的節點或之后將要創建的節點在內存的哪個位置。

        • 地址關系:?假設鏈表有3個節點 A、B、C,邏輯順序是 A -> B -> C。

          • 節點 A 可能被分配到地址?0x2000

          • 節點 B 可能被分配到地址?0x5000(很遠,與 A 不連續)。

          • 節點 C 可能又被分配到?0x3000(在 A 和 B 之間,也不連續)。

          • 這些節點的內存地址在數值上沒有任何規律,是隨機分散在內存中的,彼此之間不是緊挨著的。

        • 特點:?你無法通過起始地址和索引計算出某個節點的物理地址。節點的物理位置是隨機的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/92500.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/92500.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/92500.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡--VLAN技術

目錄 VLAN實驗報告 一、實驗拓撲 二、實驗要求 三、實驗思路 1、實驗準備 2. VLAN 3. DHCP 自動分配 4、 全網可達驗證 四、實驗步驟 (一)交換機配置- VLAN 創建與接口劃分 (二)路由器配置(R1&#xff0c…

網絡基礎17--設備虛擬化

一、傳統MSTPVRRP的不足傳統MSTPVRRP設計:規劃復雜:需要詳細規劃VRRP多實例的Master歸屬、MSTP的VLAN和生成樹實例歸屬,以及IP網段。收斂速度慢:故障恢復速度一般在秒級,VRRP收斂時間至少需要3秒,故障恢復速…

深入解析Hadoop資源隔離機制:Cgroups、容器限制與OOM Killer防御策略

Hadoop資源隔離機制概述在分布式計算環境中,資源隔離是保障多任務并行執行穩定性的關鍵技術。Hadoop作為主流的大數據處理框架,其資源管理能力直接影響集群的吞吐量和任務成功率。隨著YARN架構的引入,Hadoop實現了計算資源與存儲資源的解耦&a…

static 關鍵字的 特殊性

static 關鍵字的 “特殊性” 主要體現在其與類、對象的綁定關系,以及由此帶來的一些反常規規則,具體如下:生命周期與內存位置特殊靜態成員(變量 / 方法)隨類加載而創建,隨類卸載而銷毀,生命周期…

win10系統Apache以 FastCGI方式運行PHP

文件下載及官方網站 VC運行庫Latest下載頁:Latest supported Visual C Redistributable downloads | Microsoft Learnapache httpd官網:Welcome! - The Apache HTTP Server Project下載頁:Apache VS17 binaries and modules downloadphp官網:PHP: Hypertext Preprocessor下載頁…

MCP與企業數據集成:ERP、CRM、數據倉庫的統一接入

MCP與企業數據集成:ERP、CRM、數據倉庫的統一接入 🌟 Hello,我是摘星! 🌈 在彩虹般絢爛的技術棧中,我是那個永不停歇的色彩收集者。 🦋 每一個優化都是我培育的花朵,每一個特性都是我…

【milvus檢索】milvus檢索召回率

Milvus中兩種核心查詢方式:暴力搜索(Brute-force Search) 和 近似最近鄰搜索(Approximate Nearest Neighbor, ANN)。 逐一計算相似度:這是暴力搜索,能保證100%找到最相似的向量,但速…

docker Neo4j

Day 1 :Docker Desktop 基礎熟悉 運行官方 hello-world 測試: docker -run hello-world 運行 Nginx 體驗容器暴露端口: docker run -d -p 8080:80 nginx -d --detach 以 分離模式 運行容器 -p --publish 設置 宿主機與容器的端口映射。…

Win10_Qt6_C++_YOLO推理 -(1)MingW-opencv編譯

先上效果圖: 因為是一個為了嘗試跑通的demo,美觀、功能都先忽略哈。 一、環境 庫版本下載鏈接備注cmakecmake-4.1.0-rc2-windows-x86_64.msihttps://cmake.org/download/make x86_64-15.1.0-release-posix-seh-ucrt-rt_v12-rev0.7zhttps://github.com/…

day060-zabbix監控各種客戶端

文章目錄0. 老男孩思想-一個人的背書1. zabbix各種客戶端1.1 Windows Server監控1.2 網絡設備監控1.3 java應用監控1.4 前端監控java程序故障2. 相關項監控3. 思維導圖0. 老男孩思想-一個人的背書 學歷、能力、態度、特長、人品、口碑(身邊的人、領導) …

OpenCV 官翻 2 - 圖像處理

文章目錄色彩空間轉換目標色彩空間轉換目標追蹤如何確定要追蹤的HSV值?練習圖像的幾何變換目標變換縮放翻譯旋轉仿射變換透視變換其他資源圖像閾值處理目標簡單閾值化自適應閾值化大津二值化法Otsu二值化算法原理其他資源練習圖像平滑處理目標二維卷積(圖…

動態路由協議基礎

一、動態路由協議簡介2.動態路由協議的基本功能二、動態路由協議分類對比項距離矢量(如 RIP)鏈路狀態(如 OSPF)信息來源只聽直接鄰居說收集全網鏈路狀態,自己建 “地圖”計算邏輯鄰居給的距離 1,簡單累加用…

netstat -tunlp | grep的作用

??一、命令整體結構解析??命令由兩部分通過管道符 |連接:netstat -tunlp:核心網絡狀態統計命令,輸出指定類型的網絡連接信息;grep:文本搜索工具,用于過濾 netstat的輸出結果,僅保留符合特定…

教育數字化革命:低代碼破局與未來展望

當下,教育領域正經歷前所未有的深刻變革——教育數字化轉型。這并非簡單的技術疊加,而是從教育理念到模式的全方位重塑,已成為推動教育高質量發展、助力我國邁向教育強國的核心驅動力。數字技術正以前所未有的速度和力度,全方位重…

云服務器磁盤IO性能優化的測試與配置方法

云服務器磁盤IO性能優化的測試與配置方法在云計算環境中,磁盤IO性能直接影響著應用程序的響應速度和系統整體穩定性。本文將深入解析云服務器磁盤IO性能優化的關鍵技術路徑,從測試方法論到配置調整方案,幫助運維人員突破存儲瓶頸。我們將重點…

Python Day22 - 復習日

浙大疏錦行 Pythonday22 本周學習內容主要是有關降維的一些內容以及基本的數組操作: 數組的常見操作以及shape聚類算法的選擇以及常用評估指標、聚類后的結果分析特征篩選方法:方差篩選、lasso等SVD進行降維常見的降維算法:LDA、PCA等

飛算JavaAI文字需求描述功能:高效驅動項目開發的智能解決方案

在數字化開發浪潮中,如何將模糊的需求快速轉化為具體的開發指令,是提升項目效率的關鍵環節。飛算JavaAI推出的文字需求描述功能,以自然語言交互為核心,為開發者和項目管理者提供了一套高效、精準的需求轉化與項目管理方案&#xf…

探索自然語言處理NLP的Python世界

文本預處理:數據清洗與標準化 在自然語言處理(NLP)的旅程中,文本預處理是至關重要的第一步。原始文本數據往往包含噪聲、不一致性以及各種格式問題,直接影響后續模型的性能。文本預處理旨在將文本轉化為統一、規范的格…

ECMAScript(簡稱 ES)和 JavaScript 的關系

ECMAScript(簡稱ES)和JavaScript的關系常常令人困惑。簡單來說:ECMAScript是標準,JavaScript是實現。以下從多個維度詳細解析它們的區別與聯系: 一、定義與核心關系ECMAScript 標準化規范:由ECMA國際&#…

筆試——Day16

文章目錄第一題題目思路代碼第二題題目:思路代碼第三題題目:思路代碼優化(滑動窗口)第一題 題目 字符串替換 思路 模擬 當遍歷到正常字符時,直接加入結果答案;當遍歷到占位符時,按順序使用arg…