<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了java實現單連結串列中增刪改的具體程式碼,供大家參考,具體內容如下
連結串列是有序的列表,但是它在記憶體中是儲存如下
小結:
單連結串列(帶頭結點) 邏輯結構示意圖如下
單連結串列的增刪改應用範例
使用帶head 頭的單向連結串列實現——三國英雄排行榜管理完成對英雄人物的增刪改查操作
增
1.第一種方法在新增英雄時,直接新增到連結串列的尾部
2.第二種方式在新增英雄時,根據排名將英雄插入到指定位置(如果有這個排名,則新增失敗,並給出提示)
刪
改
思路:
(1) 先找到該節點,通過遍歷,
(2) temp.name = newHeroNode.name ; temp.nickname= newHeroNode.nickname
程式碼
package com.hsy.linkedlist; public class SingleLinkedListDemo { public static void main(String[] args) { //進行測試 //先建立節點 HeroNode hero1 = new HeroNode(1, "劉備", "仁義"); HeroNode hero2 = new HeroNode(2, "關羽", "武聖"); HeroNode hero3 = new HeroNode(3, "張飛", "暴躁"); HeroNode hero4 = new HeroNode(4, "趙雲", "單騎救主"); //建立一個連結串列 SingleLinkedList singleLinkedList = new SingleLinkedList(); //加入到連結串列中 // singleLinkedList.add(hero1); // singleLinkedList.add(hero2); // singleLinkedList.add(hero3); // singleLinkedList.add(hero4); //加入按照編號的順序 singleLinkedList.addByOrder(hero1); singleLinkedList.addByOrder(hero4); singleLinkedList.addByOrder(hero3); singleLinkedList.addByOrder(hero2); //顯示 singleLinkedList.showList(); //測試修改 HeroNode newHeroNode = new HeroNode(3, "滷蛋", "暴躁個錘子"); singleLinkedList.update(newHeroNode); System.out.println("修改後的連結串列情況:"); singleLinkedList.showList(); //刪除一個節點 singleLinkedList.delete(1); System.out.println("刪除後的連結串列情況:"); singleLinkedList.showList(); } } //定義SingleLinkedList來管理我們的英雄 class SingleLinkedList { //初始化一個頭節點,不存放資料 private final HeroNode head = new HeroNode(0, "", ""); //增 //新增節點到單向連結串列 public void add(HeroNode heroNode) { //思路:(不考慮編號順序) //1.找到當前連結串列的最後節點 //2.將最後這個節點的next域指向新的節點 HeroNode temp = head; //遍歷連結串列,找到最後的節點 while (true) { if (temp.next == null) { break; } //如果沒有找到最後,將temp後移 temp = temp.next; } //必須保證退出while迴圈時,temp指向連結串列的最後,並將最後這個節點的next域指向新的節點 temp.next = heroNode; } //第二種方式在新增英雄時,根據排名將英雄插入到指定位置 // (如果有這個排名,則新增失敗,並給出提示) public void addByOrder(HeroNode heroNode) { //由於頭節點不能動,因此我們仍然通過一個輔助變數來幫助我們找到新增的位置 //因為是單連結串列,因此我們找的temp位於新增位置的前一個結點,否則不能插入 HeroNode temp = head; boolean flag = false;//標識新增的編號是否已經存在,預設為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; } //判斷flag的值 if (flag) {//編號已經存在 System.out.println("準備插入的英雄的編號:" + heroNode.no + "已經存在,不能再加入!"); } else { heroNode.next = temp.next; temp.next = heroNode; } } //刪 //head不能動,我們需要一個temp輔助節點找到待刪除節點的前一個結點 //我們在比較的時候是temp.next.no和需要刪除的節點的no進行比較 public void delete(int no) { HeroNode temp = head; boolean flag = false; while (true) { if (temp.next == null) { break; } if (temp.next.no == no) { //找到了待刪除節點的前一個結點temp flag = true; break; } temp = temp.next; } if (flag) { temp.next = temp.next.next; } else { System.out.println("要刪除的" + no + "節點不存在"); } } //改 //修改節點的資訊,根據編號來修改 public void update(HeroNode newHeroNode) { //判斷連結串列是否為空 if (head.next == null) { System.out.println("連結串列為空!"); } HeroNode temp = head.next; boolean flag = false; while (true) { if (temp == null) { break; } if (temp.no == newHeroNode.no) { //找到 flag = true; break; } temp = temp.next; } //根據flag判斷是否找到需要修改的值 if (flag) {//編號已經存在 temp.name = newHeroNode.name; temp.nickname = newHeroNode.nickname; } else {//沒有找到 System.out.println("沒有找到編號為:" + newHeroNode.no + "的節點,不能修改"); } } //查 //顯示遍歷連結串列 public void showList() { //判斷連結串列是否為空 if (head.next == null) { System.out.println("連結串列為空!"); } //由於頭節點不能動,因此我們需要一個輔助變數來遍歷 HeroNode temp = head.next; while (true) { //判斷連結串列是否到最後 if (temp == null) { break; } System.out.println(temp); //這時需要將temp後移,否則會陷入死迴圈 temp = temp.next; } } } //定義一個HeroNode,每個HeroNode物件就是一個節點 class HeroNode { public int no; public String name; public String nickname; public HeroNode next;//指向下一個節點 //建立構造器 public HeroNode(int no, String name, String nickname) { this.no = no; this.name = name; this.nickname = nickname; } @Override public String toString() { return "HeroNode{" + "no=" + no + ", name='" + name + ''' + ", nickname='" + nickname + ''' + '}'; } }
輸出結果
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45