java學習之數據結構:二、鏈表

本節介紹鏈表

目錄

1.什么是鏈表

1.1鏈表定義

1.2鏈表分類

2.鏈表實現

2.1創建鏈表

1)手動創建

2)創建鏈表類進行管理鏈表的相關操作

2.2添加元素

1)頭插法

2)尾插法

3)任意位置插入

2.3刪除

2.4查找

1)返回節點

2)返回索引


1.什么是鏈表

1.1鏈表定義

鏈表是一種數據結構,它由一系列節點組成。每個節點包含至少兩部分信息:數據域(用于存儲數據元素)和指針域(用于存儲指向下一個節點的引用或地址)。鏈表通過節點之間的指針連接,形成一個鏈式結構。

與數組不同:1.數組中的元素在內存中是連續存儲的,而鏈表的節點在內存中的存儲位置不一定是連續的。2.鏈表它在插入和刪除操作上相對數組更加靈活

1.2鏈表分類

  • 單向鏈表:也稱為單鏈表,是最基本的鏈表形式。每個節點只包含一個指向下一個節點的指針,只能從鏈表的頭節點開始,沿著指針依次訪問后續節點,無法反向遍歷。
  • 雙向鏈表:在雙向鏈表中,每個節點除了有一個指向后繼節點的指針外,還有一個指向前驅節點的指針。這使得雙向鏈表可以在兩個方向上進行遍歷,既可以從頭節點向后遍歷,也可以從尾節點向前遍歷。
  • 循環鏈表:循環鏈表又分為單向循環鏈表和雙向循環鏈表。單向循環鏈表的尾節點的指針指向頭節點,形成一個環形結構,這樣可以從任意一個節點出發,遍歷整個鏈表。雙向循環鏈表則是頭節點的前驅指針指向尾節點,尾節點的后繼指針指向頭節點,同樣實現了環形的結構,提供了更靈活的遍歷方式。

2.鏈表實現

2.1創建鏈表

1)手動創建

即自己創建一個node類然后調用

package com.qcby;public class Node {Node next;int value;public static void main(String[] args) {Node node1 = new Node();node1.value = 1;Node node2 = new Node();node2.value = 2;node1.next = node2;System.out.println(node1.value);System.out.println(node1.toString());}public String toString() {return "Node[" +"next=" + next +", value=" + value +']';}
}

2)創建鏈表類進行管理鏈表的相關操作

使用?LinkList list = new LinkList();?創建鏈表

2.2添加元素

1)頭插法

頭插法就是每次有一個新的元素進入鏈表時,將新節點插入到鏈表的頭部,使其成為新的頭節點。

代碼如下:

	public void addHead(int value) {Node node=new Node(value);if(head==null) {head=node;return;}node.next=head;head=node;}

2)尾插法

當每次鏈表接受新的元素時,將新節點插入到鏈表的尾部,使其成為新的尾節點。

代碼如下:

public void add(int data) {Node node = new Node();node.value = data;if (head == null) {head = node;} else {Node temp = head;while (temp.next != null) {temp = temp.next;}temp.next = node;}}

3)任意位置插入

在接收到新元素時,給新元素的位置做規定,即任意位置插入是將新節點插入到鏈表的指定位置。

代碼:

public void addIndex(int index, int data) {Node node = new Node();node.value = data;if (index < 0 || index > getLength()) {System.out.println("超出范圍");return;}if (index == 0) {addHead(data);} else {Node temp = head;for (int i = 0; i < index - 1; i++) {temp = temp.next;}node.next = temp.next;temp.next = node;}}

注意:想要實現任意位置插入,需要關注其鏈表長度,防止該插入位置比鏈表長度大出現問題

即實現一個求解長度的類,主要是通過遍歷鏈表節點來記錄長度:

    public int getLength() {int length = 0;Node temp = head;while (temp != null) {length++;temp = temp.next;}return length;}

2.3刪除

public void remove(int data) {if (head == null) {System.out.println("鏈表為空");return;}if (head.value == data) {head = head.next;return;}Node temp = head;while (temp.next != null) {if (temp.next.value == data) {temp.next = temp.next.next;return;}temp = temp.next;}}

2.4查找

1)返回節點

    public Node find(int data) {Node temp = head;while (temp != null) {if (temp.value == data) {return temp;}temp = temp.next;}return null;}

2)返回索引

    public int findIndex(int data) {Node temp = head;int index = 0;while (temp != null) {if (temp.value == data) {return index;}temp = temp.next;index++;}return -1;}

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

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

相關文章

【計算機網絡-應用層】解析HTTP會話保持:Cookie與Session的原理與實踐

&#x1f4da; 博主的專欄 &#x1f427; Linux | &#x1f5a5;? C | &#x1f4ca; 數據結構 | &#x1f4a1;C 算法 | &#x1f152; C 語言 | &#x1f310; 計算機網絡 上篇文章&#xff1a;實現HTTP服務器 下篇文章&#xff1a;傳輸層協議-UDP 文章摘要&…

[ Qt ] | 第一個Qt程序

1. 創建Qt項目 我們打開Qt Create工具&#xff0c;左上角“文件”&#xff0c;新建文件。 --- --- --- --- 這個是我們的APP“走出國門”的時候&#xff0c;要關注的&#xff0c;這里就不說了。 后面這兩個直接默認&#xff0c;下一步就行~~。 2. 項目默認內容 下面就是Qt C…

影刀RPA中新增自己的自定義指令

入門到實戰明細 1. 影刀RPA自定義指令概述 1.1 定義與作用 影刀RPA的自定義指令是一種強大的功能&#xff0c;旨在提高流程復用率&#xff0c;讓用戶能夠個性化定制指令&#xff0c;實現流程在不同應用之間的相互調用。通過自定義指令&#xff0c;用戶可以將常用的、具有獨立…

LangChain:重構大語言模型應用開發的范式革命

2022年10月22日,Harrison Chase在GitHub上提交了名為LangChain的開源項目的第一個代碼版本。這個看似普通的代碼提交,卻悄然開啟了一場重塑大語言模型(LLM)應用開發范式的技術革命。彼時,距離ChatGPT引爆全球人工智能浪潮尚有一月之遙,但LangChain的誕生已經預示了LLM技術…

區塊鏈+醫療:破解數據共享困局,筑牢隱私安全防線

在醫療健康領域&#xff0c;數據共享與隱私保護一直是一對難以調和的矛盾。一方面&#xff0c;分散在不同機構的醫療數據&#xff08;如電子病歷、檢查報告、用藥記錄&#xff09;阻礙了診療效率和科研進展&#xff1b;另一方面&#xff0c;患者隱私泄露事件頻發&#xff0c;加…

pycharm導入同目錄下文件未標紅但報錯ModuleNotFoundError

此貼僅為記錄debug過程&#xff0c;為防后續再次遇見 問題 問題情境 復現文章模型&#xff0c;pycharm項目初次運行 問題描述 在導入同目錄下其它文件夾中的python文件時&#xff0c;未標紅&#xff0c;但運行時報錯ModuleNotFoundError 報錯信息 未找到該模塊 Traceback …

啟發式算法-蟻群算法

蟻群算法是模擬螞蟻覓食行為的仿生優化算法&#xff0c;原理是信息素的正反饋機制&#xff0c;螞蟻通過釋放信息素來引導同伴找到最短路徑。把問題的元素抽象為多條路徑&#xff0c;每次迭代時為每只螞蟻構建一個解決方案&#xff0c;該解決方案對應一條完整的路徑&#xff0c;…

Redis 腳本:深入理解與實踐指南

Redis 腳本:深入理解與實踐指南 引言 Redis 是一款高性能的鍵值存儲數據庫,廣泛應用于緩存、消息隊列、分布式鎖等領域。腳本在 Redis 中扮演著至關重要的角色,它允許開發者以編程的方式執行復雜的操作,提高數據處理的效率。本文將深入探討 Redis 腳本的概念、應用場景、…

Vue3 Echarts 3D立方體柱狀圖實現教程

文章目錄 前言一、實現原理二、series ——type: "pictorialBar" 簡介2.1 常用屬性 三、代碼實戰3.1 封裝一個echarts通用組件 echarts.vue3.2 實現一個立方體柱狀圖&#xff08;1&#xff09;首先實現一個基礎柱狀圖&#xff08;2&#xff09;添加立方體棱線&#x…

每天一道面試題@第五天

1.包裝類型的緩存機制了解么&#xff1f; 指部分包裝類在創建對象時&#xff0c;會將一定范圍內的對象緩存起來&#xff0c;當再次使用相同值創建對象時&#xff0c;優先從緩存中獲取&#xff0c;而不是重新創建新對象。【提高性能】【節省內存】 列舉幾個常見的包裝類緩存機…

mysql--索引

索引作為一種數據結構&#xff0c;其用途是用于提升檢索數據的效率。 分類 普通索引&#xff08;INDEX&#xff09;&#xff1a;索引列值可重復 唯一索引&#xff08;UNIQUE&#xff09;&#xff1a;索引列值必須唯一&#xff0c;可以為NULL 主鍵索引&#xff08;PRIMARY KEY&a…

王道考研數據結構課后題代碼題(2026版)——排序部分

一、前言 本合集以王道考研《數據結構》輔導書&#xff08;2026版&#xff09;課后習題代碼題部分為參考依據&#xff0c;給出課后習題代碼題的可執行代碼的實現&#xff0c;本合集使用編程語言以C/C語言為主&#xff0c;也不限于使用Python和Java語言&#xff0c;本套合計代碼…

AVFormatContext 再分析零

隨著對于AVFormatContext 各個參數的學習&#xff0c;逐漸可以從 整體架構上 再認識一下 AVFormatContext 了。 還是從解封裝的第一步開始。 int avformat_open_input(AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options); 實際上…

uniapp打包apk詳細教程

目錄 1.打apk包前提條件 2.獲取uni-app標識 3.進入dcloud開發者后臺 4.開始打包 1.打apk包前提條件 1.在HBuilderX.exe軟化中&#xff0c;登錄自己的賬號 2.在dcloud官網&#xff0c;同樣登錄自己的賬號。沒有可以免費注冊。 2.獲取uni-app標識 獲取方法&#xff1a;點…

Vue2 和 Vue3 的核心區別

1. 響應式原理&#xff1a;從「手動擋」到「自動擋」 Vue2&#xff1a; 使用 Object.defineProperty 監聽數據變化&#xff0c;但無法檢測新增屬性和數組索引修改&#xff0c;需要借助 Vue.set。 // Vue2 中修改數組元素不會觸發視圖更新 this.list[0] 新值; // ? 不…

EMMC存儲性能測試方法

記于 2022 年 9 月 15 日 EMMC存儲性能測試方法 - Wesley’s Blog 參考Android-emmc性能測試 | 一葉知秋進行實踐操作 dd 命令 頁面緩存 為了測試 emmc 的真實讀寫性能&#xff0c;我們需要先把頁面緩存給清理&#xff1a; echo 1 > /proc/sys/vm/drop_caches console:…

軟件管理(安裝方式)

1.rpm安裝 1.1.rpm介紹 rpm軟件包名稱: 軟件名稱 版本號(主版本、次版本、修訂號) 操作系統 -----90%的規律 舉例:openssh-6.6.1p1-31.el7.x86_64.rpm 數字是版本號:第一位主版本號,第二位次版本號,帶橫杠的是修訂號, el幾---操作系統的版本。 #用rpm安裝需要考慮如下信…

OnlyOffice Document Server 源碼調試指南-ARM和x86雙模式安裝支持

在ARM64架構下創建的ONLYOFFICE源碼調試容器具有顯著優勢。該容器基于官方Document Server鏡像構建&#xff0c;通過集成Git、Python和Node.js等工具鏈&#xff0c;實現跨平臺環境一致性&#xff0c;確保ARM設備的兼容性。容器化隔離消除了依賴沖突&#xff0c;支持快速部署到邊…

oracle 數據庫查詢指定用戶下每個表占用空間的大小,倒序顯示

oracle 查詢指定用戶下每個表占用空間的大小&#xff0c;倒序顯示 使用場景&#xff1a;數據分析&#xff1b;導出醫院正式庫到開發環境時&#xff0c;查詢出占用表空間高的業務表、導出時排除該表 在Oracle數據庫中&#xff0c;要查詢指定用戶下每個表占用空間的大小并以倒序…

歸并排序【逆序對】

目錄 歸并排序原理 逆序對 歸并排序 主要利用分治思想&#xff0c;時間復雜度O(nlogn) 原理 1.對數列不斷等長拆分&#xff0c;直到一個數的長度。2.回溯時&#xff0c;按升序合并左右兩段。3.重復以上兩個過程&#xff0c;直到遞歸結束。 合并 1.i&#xff0c;j分別指向a的…