日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java版单链表讲解

發布時間:2025/3/15 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java版单链表讲解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈表介紹

鏈表是有序的列表,但是它在內存中是存儲如下

1.鏈表是以節點的方式來存儲,是鏈式存儲
2.每個節點包含 data 域, next 域:指向下一個節點.
3.如圖:發現鏈表的各個節點不一定是連續存儲.
4.鏈表分帶頭節點的鏈表和沒有頭節點的鏈表,根據實際的需求來確定

單鏈表介紹

單鏈表(帶頭節點)邏輯結構示意圖如下

單鏈表應用實例

使用帶head頭的單向鏈表實現 –漫威英雄排行榜管理
完成對英雄人物的增刪改查操作, 注: 刪除和修改,查找

  • 第一種方法在添加英雄時,直接添加到鏈表的尾部
  • 第二種方式在添加英雄時,根據排名將英雄插入到指定位置 (如果有這個排名,則添加失敗,并給出提示)
package linkedlist;public class SingleLinkedListDemo {public static void main(String[] args) {//測試//先創建節點HeroNode heroNode1 = new HeroNode(1, "托尼·史塔克", "鋼鐵俠");HeroNode heroNode2 = new HeroNode(2, "班納博士", "綠巨人");HeroNode heroNode3 = new HeroNode(3, "斯嘉麗", "黑寡婦");HeroNode heroNode4 = new HeroNode(4, "帕克", "蜘蛛俠");HeroNode heroNode5 = new HeroNode(5, "洛基", "神");//創建鏈表SingleLinkedList singleLinkedList = new SingleLinkedList();//加入singleLinkedList.addByOrder(heroNode5);singleLinkedList.addByOrder(heroNode2);singleLinkedList.addByOrder(heroNode1);singleLinkedList.addByOrder(heroNode4);singleLinkedList.addByOrder(heroNode3);singleLinkedList.addByOrder(heroNode3);//顯示 // singleLinkedList.list();//測試修改節點的代碼HeroNode newHeroNode = new HeroNode(2, "baihaibai", "AHAHAHA");singleLinkedList.update(newHeroNode);singleLinkedList.list();System.out.println();//刪除節點singleLinkedList.del(1);singleLinkedList.del(3);singleLinkedList.list();} } //定義SingleLinkedList 管理我們的英雄 class SingleLinkedList{//先初始化一個頭節點,頭節點不要動,不存放具體的數據private HeroNode head = new HeroNode(0, "", "");//添加節點到單鏈表//思路,當不考慮編號順序時//1,找到當前鏈表的最后節點//2,將最后這個節點的next 指向新的節點public void add(HeroNode heroNode){//因為head節點不能動,因此我們需要一個輔助遍歷tempHeroNode temp = head;//遍歷鏈表,找到最后while(true){if(temp.next == null){break;}//如果沒有找到最后,將temp后移temp = temp.next;}//當退出while循環時,temp就指向了鏈表的最后//將最后這個節點的next 指向 新的節點temp.next = heroNode;}public void list(){//判斷鏈表是否為空if(head.next == null){System.out.println("鏈表為空");return;}//因為頭節點不能動,需要一個輔助變量遍歷整個鏈表HeroNode temp = head.next;while(true){//判斷是否到鏈表最后if(temp == null){break;}//輸出節點的信息System.out.println(temp);//將temp后移,一定要記住要后移,不然是死循環temp = temp.next;}}//第二種方式添加英雄時,根據排名將英雄插入到指定位置//(如果有這個排名,則添加失敗,并給出提示)public void addByOrder(HeroNode heroNode){//因為頭節點不能動,因此我們仍然通過一個輔助指針(變量)來幫助找到添加的位置//因為單鏈表,因為我們找的temp 是位于 添加位置的前一個節點,否則插入不了HeroNode temp =head;boolean flag = false;//flag 標志添加的編號是否存在,默認為falsewhile(true){if(temp.next == null){//說明temp已經在鏈表的最后break;}if(temp.next.no>heroNode.no){//位置找到,就在temp的后面插入break;}else if(temp.next.no==heroNode.no){flag = true;break;}temp = temp.next;//后移,遍歷當前鏈表}//判斷flag的值if(flag){System.out.println("準備插入的英雄編號已經存在"+heroNode.no);}else{//插入到鏈表中,temp的后面heroNode.next = temp.next;temp.next=heroNode;}}//根據newHeroNode 的no來修改即可public void update(HeroNode newHeroNode){//判斷是否為空if(head.next==null){System.out.println("鏈表為空");return;}//找到需要修改的節點,根據no編號//定義一個輔助變量HeroNode temp = head.next;boolean flag = false;//表示是否找到該節點while(true){if(temp == null){break;//已經遍歷完鏈表}if(temp.no==newHeroNode.no){//找到flag= true;break;}temp = temp.next;}if(flag){temp.name = newHeroNode.name;temp.nickname = newHeroNode.nickname;}else{//沒有找到System.out.println("沒有找到編號為"+newHeroNode.no+"節點,不能修改");}}//刪除節點//思路//1 head不能動,因此我們需要一個temp輔助節點找到刪除節點的前一個結點//2 說明我們在比較時,是temp.next.no 和 需要刪除的節點no比較public void del(int no){HeroNode temp = head;boolean flag = false;//標志是否找到待刪除結點的前一個結點while(true){if(temp.next==null){//已經到鏈表的最后break;}if(temp.next.no==no){//找到了待刪除節點的其前一個結點flag = true;break;}temp = temp.next;}//判斷flagif(flag){//找到 可以刪除temp.next = temp.next.next;}else{System.out.println("要刪除的節點"+no+"不存在");}}}//定義HeroNode,每個HeroNode對象就是一個節點 class HeroNode{public int no;public String name;public String nickname;public HeroNode next;//指向下一個節點//構造器public HeroNode(int no,String name,String nickname){super();this.no = no;this.name = name;this.nickname = nickname;}//重寫toString()@Overridepublic String toString() {return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname + "]";}} 新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

以上是生活随笔為你收集整理的Java版单链表讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。