篇章六 數據結構——鏈表(二)

目錄

1. LinkedList的模擬實現

1.1?雙向鏈表結構圖?編輯

1.2?三個簡單方法的實現

1.3?頭插法

1.4 尾插法

1.5 中間插入

1.6?刪除 key

1.7?刪除所有key

1.8?clear

2.LinkedList的使用

2.1 什么是LinkedList

5.2 LinkedList的使用

?1.LinkedList的構造

2. LinkedList的其他常用方法介紹

3.LinkedList的遍歷33.

5.3 ArrayList 和 LinkedList的區別


1. LinkedList的模擬實現

1.1?雙向鏈表結構圖

1.2?三個簡單方法的實現

@Overridepublic void display() {ListNode cur = head;while (cur != null) {System.out.print(cur.val + " ");cur = cur.next;}System.out.println();}@Overridepublic int size() {int len = 0;ListNode cur = head;while (cur != null) {len++;cur = cur.next;}return len;}@Overridepublic boolean contains(int key) {ListNode cur = head;while (cur != null) {if (cur.val == key) {return true;}cur = cur.next;}return false;}

此處和單鏈表一樣,不在贅述。

1.3?頭插法

    @Overridepublic void addFirst(int data) {ListNode node = new ListNode(data);if (head == null) {head = last = node;}else {node.next = head;head.prev = node;head = node;}}

1.4 尾插法

    @Overridepublic void addLast(int data) {ListNode node = new ListNode(data);if (head == null) {last = head = node;}else {last.next = node;node.prev = last;last = last.next;}}

1.5 中間插入

@Override
public void addIndex(int index, int data) {int len = size();if (index < 0 || index > len) {return;}if (index == 0) {addFirst(data);return;}if (index == len) {addLast(data);return;}// 中間插入ListNode node = new ListNode(data);ListNode cur = findIndex(index);node.next = cur;cur.prev.next = node;node.prev = cur.prev;cur.prev = node;
}
private ListNode findIndex(int index) {ListNode cur = head;while (index != 0) {cur = cur.next;index--;}return cur;
}

此處直接找到 index 位置即可,不需要找 index - 1,因為有 prev

1.6?刪除 key

@Overridepublic void remove(int key) {ListNode cur = head;while (cur != null) {if (cur.val == key) {// 開始刪除if (cur == head) {head = head.next;if (head != null) {head.prev = null;}} else {cur.prev.next = cur.next;if (cur.next == null) {last = last.prev;}else {cur.next.prev = cur.prev;}}return;}cur = cur.next;}}

注意:

1.此處最關鍵的代碼:

????????cur.prev.next = cur.next;

????????cur.next.prev = cur.prev;

2.但是很顯然解決不了頭節點和尾節點,需要條件語句單獨處理

3.特殊情況:

????????只有一個節點的鏈表,且為key值

? ? ? ? 需要加上判斷邏輯:

????????????????????if (head != null) {
? ? ? ? ? ? ? ? ? ? ? ? head.prev = null;
? ? ? ? ? ? ? ? ? ? }

1.7?刪除所有key

@Overridepublic void removeAllKey(int key) {ListNode cur = head;while (cur != null) {if (cur.val == key) {// 開始刪除if (cur == head) {head = head.next;if (head != null) {head.prev = null;}} else {cur.prev.next = cur.next;if (cur.next == null) {last = last.prev;}else {cur.next.prev = cur.prev;}}}cur = cur.next;}}

注意:

????????很顯然將 刪除key代碼中的 return;刪除即可

1.8?clear

    @Overridepublic void clear() {ListNode cur = head;while (cur != null) {ListNode curNext = cur.next;cur.prev = null;cur.next = null;cur = curNext;}head = null;last = null;}

2.LinkedList的使用

2.1 什么是LinkedList

LinkedList 的官方文檔

????????LinkedList的底層是雙向鏈表結構,由于鏈表沒有將元素存儲在連續的空間中,元素存儲在單獨的節點中,然后通過引用將節點連接起來了,因此在在任意位置插入或者刪除元素時,不需要搬移元素,效率比較高

在集合框架中,LinkedList也實現了List接口,具體如下:

【說明】

  1. LinkedList實現了List接口

  2. LinkedList的底層使用了雙向鏈表

  3. LinkedList沒有實現RandomAccess接口,因此LinkedList不支持隨機訪問

  4. LinkedList的任意位置插入和刪除元素時效率比較高,時間復雜度為O(1)

  5. LinkedList比較適合任意位置插入的場景

5.2 LinkedList的使用

?1.LinkedList的構造

2. LinkedList的其他常用方法介紹

3.LinkedList的遍歷33.

 public static void main(String[] args) {LinkedList<Integer> linkedList2 = new LinkedList<>();linkedList2.add(1);linkedList2.addLast(3);linkedList2.addLast(4);linkedList2.addLast(5);System.out.println(linkedList2);System.out.println("=========ListIterator=========");ListIterator<Integer> listIterator = linkedList2.listIterator(linkedList2.size());while (listIterator.hasPrevious()) {System.out.print(listIterator.previous() + " ");}System.out.println();System.out.println("=========ListIterator=========");ListIterator<Integer> listIterator1 = linkedList2.listIterator();while (listIterator1.hasNext()) {System.out.print(listIterator1.next() + " ");}System.out.println();System.out.println("=========Iterator=========");Iterator<Integer> iterator = linkedList2.iterator();while (iterator.hasNext()) {System.out.print(iterator.next() + " ");}System.out.println();System.out.println("=========for each=========");for (Integer x : linkedList2) {System.out.print(x + " ");}System.out.println();System.out.println("=========for=========");for (int i = 0; i < linkedList2.size(); i++) {System.out.print(linkedList2.get(i) + " ");}System.out.println();}

5.3 ArrayList 和 LinkedList的區別

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

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

相關文章

刪除隊列中整數

給定一個長度為N的整數數列A_1,A_2,...,A_N&#xff0c;請重復以下操作K次。 每次選擇數列中最小的整數&#xff08;如果最小值不止一個&#xff0c;選擇最靠前的&#xff09;&#xff0c;將其刪除&#xff0c;并把與它相鄰的整數加上被刪除的數值。 請問K次操作后的序列是什…

[神經網絡]使用olivettiface數據集進行訓練并優化,觀察對比loss結果

結合歸一化和正則化來優化網絡模型結構&#xff0c;觀察對比loss結果 搭建的神經網絡&#xff0c;使用olivettiface數據集進行訓練&#xff0c;結合歸一化和正則化來優化網絡模型結構&#xff0c;觀察對比loss結果 from sklearn.datasets import fetch_olivetti_faces #倒入數…

算法分析·回溯法

回溯法 方法概述算法框架問題實例TSP 問題n皇后問題 回溯法效率分析 方法概述 回溯法是一個既帶有系統性又帶有跳躍性的搜索算法&#xff1b; **系統性&#xff1a;**它在包含問題的所有解的解空間樹中&#xff0c;按照深度優先的策略&#xff0c;從根結點出發搜索解空間樹。…

Golang分布式系統開發實踐指南

Golang分布式系統開發實踐指南 一、為什么選擇Golang&#xff1f; ?原生并發模型? Goroutine和Channel機制天然適合分布式系統的并發需求?高性能編譯? 靜態編譯生成二進制文件&#xff0c;部署簡單&#xff0c;內存占用低?豐富生態? Go Module管理、標準庫支持HTTP/2、…

基于stm32風速風向溫濕度和瓦斯檢測(仿真+代碼)

資料下載地址&#xff1a;基于stm32風速風向溫濕度和瓦斯檢測 一、項目功能 1.風速&#xff0c;風向&#xff0c;溫濕度&#xff0c;瓦斯&#xff0c;報警。 2.可以設置溫濕度&#xff0c;瓦斯&#xff0c;風速報警閾值。 3.數據上傳到云平臺。 二、仿真圖 三、程序 #inc…

桃黑黑反斗戰

1.編寫求解Hanoi漢諾塔的遞歸算法代碼&#xff0c;輸出移動過程&#xff0c;并統計總移動次數。 對不同規模的漢諾塔&#xff0c;給出測試的結果 #include <stdio.h> #include <time.h> int moveCount 0; void hanoi(int n,char source,char auxiliary,char targ…

react-native的token認證流程

在 React Native 中實現 Token 認證是移動應用開發中的常見需求&#xff0c;它用于驗證用戶的身份并授權其訪問受保護的 API 資源。 Token 認證的核心流程&#xff1a; 用戶登錄 (Login): 用戶在前端輸入用戶名和密碼。前端將這些憑據發送到后端 API。后端驗證憑據。如果驗證成…

Dify:詳解 docker-compose.yaml配置文件

詳解 docker-compose.yaml 配置文件 docker-compose.yaml 是用于定義和運行多容器 Docker 應用的配置文件。下面&#xff0c;我們將詳細解釋您提供的 docker-compose.yaml 文件&#xff0c;包括各個服務的作用、配置&#xff0c;以及它們與 .env 文件之間的關系。 文件概覽 自…

Python基于Django的主觀題自動閱卷系統【附源碼、文檔說明】

博主介紹&#xff1a;?Java老徐、7年大廠程序員經歷。全網粉絲12w、csdn博客專家、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精彩專欄推薦訂閱&#x1f447;&…

今日行情明日機會——20250528

上證指數縮量收小陰線&#xff0c;個股跌多漲少&#xff0c;總體情緒偏差&#xff0c;注意風險為主。 深證指數&#xff0c;縮量收小陰線&#xff0c;連續5天陰線&#xff0c;明后天反彈的概率增大&#xff0c;但仍要注意風險。 2025年5月28日漲停股主要行業方向分析 1. 無人…

基于stm32LORA無線抄表系統仿真

資料下載地址&#xff1a;基于stm32LORA無線抄表系統仿真 1、項目介紹 基于LoRa的無線通信的電力抄表系統&#xff0c;采集節點數據&#xff0c;通過LoRa無線通信進行數據傳輸&#xff0c;最后再網關節點上顯示。 2、仿真圖 3、仿真代碼 #include "oled.h" #incl…

不同電腦同一個網絡ip地址一樣嗎

不同電腦在連接同一個WiFi時&#xff0c;它們的IP地址會相同嗎&#xff1f;相信不少朋友都對這個問題感到好奇&#xff0c;今天我們就來詳細探討一下。 一、基礎概念&#xff1a;IP地址的本質與分類 IP地址是分配給網絡設備的唯一標識符&#xff0c;用于在互聯網或局域網中定位…

CentOS 7 下 Redis 從 5.0 升級至 7.4.3 全流程實踐

目錄 前言1 查看 Redis 運行情況與配置1.1 查看 Redis 是否正在運行1.2 連接 Redis 服務并獲取配置信息1.3 查找 redis.conf 配置文件位置 2 關閉舊版本 Redis 實例2.1 使用客戶端命令關閉 Redis2.2 驗證 Redis 是否完全關閉 3 升級 GCC 編譯環境3.1 檢查當前 GCC 版本3.2 安裝…

SQLord: 基于反向數據生成和任務拆解的 Text-to-SQL 企業落地方案

曾在Text-to-SQL方向做過深入的研究&#xff0c;以此為基礎研發的DataAgent在B2B平臺成功落地&#xff0c;因此作為第一作者&#xff0c;在 The Web Conference (WWW’2025, CCF-A) 會議上發表了相關論文&#xff1a; SQLord: A Robust Enterprise Text-to-SQL Solution via R…

內網搭建NTS服務器

內網搭建NTS服務器 關鍵字 : ntp nts ipv6 NTS 是 Network Time Security&#xff08;網絡時間安全&#xff09;的縮寫,是 NTP 的一種安全擴展機制。它利用傳輸層安全&#xff08;TLS&#xff09;和相關數據的認證加密&#xff08;AEAD&#xff09;&#xff0c;為 NTP 的客戶…

AD9268、AD9643調試過程中遇到的問題

Ad9268芯片 AD9268是一款雙通道、16位、80 MSPS/105 MSPS/125 MSPS模數轉換器(ADC)。AD9268旨在支持要求高性能、低成本、小尺寸和多功能的通信應用。雙通道ADC內核采用多級差分流水線架構&#xff0c;集成輸出糾錯邏輯。每個ADC都具有寬帶寬、差分采樣保持模擬輸入放大器&…

用豆包寫單元測試

用豆包寫單元測試&#xff0c; 輸入 vue 模板內容&#xff0c;輸入 參考vue模板內容寫一個單元測試要求用jest.mock實現構造完成&#xff0c;修復bug。npm run test:unit – tests/unit/views/xxx/xxx.spec.js看下 % Stmts 語句覆蓋率&#xff1a;執行到的代碼語句占總語句的比…

css樣式塊重復調用

通譯靈碼解釋。還給了一些示例&#xff0c;包含傳參等內容 scss和sass的區別。scss與sass是兩種樣式編寫風格&#xff0c;scss是大括號加;號形式。而sass是縮進的格式使用scss為什么要要安裝sass呢。sass是一門css預處理器語言。所以要安裝。

【深度學習新浪潮】以圖搜地點是如何實現的?(含大模型方案)

1. 以圖搜地點的實現方式有哪些? 掃描手機照片中的截圖并識別出位置信息,主要有以下幾種實現方式: 通過照片元數據獲取: 原理:現代智能手機拍攝的照片通常會包含Exif(Exchangeable Image File)元數據。Exif中除了有像素信息之外,還包含了光圈、快門、白平衡、ISO、焦距…

DeepSeek R1 與 V3 的全面對比,兩個版本有什么差別?

DeepSeek R1與DeepSeek V3是深度求索&#xff08;DeepSeek&#xff09;公司推出的兩款定位不同的大語言模型&#xff0c;界面上用戶可選擇基礎模型(V3)、深度思考(R1)、聯網搜索。 基礎模型(V3)是DeepSeek的標配,沒有勾選默認就是基礎模型。為了讓用戶更清晰地了解兩款模型的差…