生活随笔
收集整理的這篇文章主要介紹了
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
);
HeroNode newHeroNode
= new HeroNode(2, "baihaibai", "AHAHAHA");singleLinkedList
.update(newHeroNode
);singleLinkedList
.list();System
.out
.println();singleLinkedList
.del(1);singleLinkedList
.del(3);singleLinkedList
.list();}
}
class SingleLinkedList{private HeroNode head
= new HeroNode(0, "", "");public void add(HeroNode heroNode
){HeroNode temp
= head
;while(true){if(temp
.next
== null
){break;}temp
= 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
.next
;}}public void addByOrder(HeroNode heroNode
){HeroNode temp
=head
;boolean flag
= false;while(true){if(temp
.next
== null
){break;}if(temp
.next
.no
>heroNode
.no
){break;}else if(temp
.next
.no
==heroNode
.no
){flag
= true;break;}temp
= temp
.next
;}if(flag
){System
.out
.println("準備插入的英雄編號已經存在"+heroNode
.no
);}else{heroNode
.next
= temp
.next
;temp
.next
=heroNode
;}}public void update(HeroNode newHeroNode
){if(head
.next
==null
){System
.out
.println("鏈表為空");return;}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
+"節點,不能修改");}}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
;}if(flag
){temp
.next
= temp
.next
.next
;}else{System
.out
.println("要刪除的節點"+no
+"不存在");}}}
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
;}@Overridepublic String
toString() {return "HeroNode [no=" + no
+ ", name=" + name
+ ", nickname=" + nickname
+ "]";}}
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!
總結
以上是生活随笔為你收集整理的Java版单链表讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。