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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构:链表

發布時間:2025/6/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构:链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

?

?帶頭節點的單鏈表的增刪改操作

package com.linkedlist;public class SingleLinkedListDemo {public static void main(String[] args){// 創建節點HeroNode h1 = new HeroNode(1, "宋江", "及時雨");HeroNode h2 = new HeroNode(2, "盧俊義", "玉麒麟");HeroNode h3 = new HeroNode(3, "吳用", "智多星");HeroNode h4 = new HeroNode(4, "公孫勝", "入云龍");SingleLinkedList list = new SingleLinkedList();// 直接將節點加到隊列末尾 // list.add(h1); // list.add(h2); // list.add(h3); // list.add(h4);// 按照編號順序加入list.addByOrder(h1);list.addByOrder(h4);list.addByOrder(h3);list.addByOrder(h2);System.out.println("按照編號順序加入后的鏈表情況...");list.list();// 修改節點HeroNode newHeroNode = new HeroNode(2, "魯智深", "花和尚");list.update(newHeroNode);System.out.println("修改后的鏈表情況...");list.list();// 刪除節點list.del(2);list.del(1);System.out.println("刪除后的鏈表情況...");list.list();} }// 定義鏈表,管理結點HeroNode class SingleLinkedList{// 先初始化一個頭節點,頭節點不能動private HeroNode head = new HeroNode(0, "", "");// 添加結點到單向鏈表,直接加到最后結點的后面public void add(HeroNode heroNode){// 找到當前鏈表的最后節點,將最后這個節點的next,指向新的節點HeroNode temp = head;while(true){if(temp.next == null){break;}// 如果沒有找到,就將temp后移temp = temp.next;}// 當退出while循環時,temp指向了鏈表的最后一個結點temp.next = heroNode;}// 修改節點的信息,根據no編號來修改,即no編號不能改// 1. 根據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.printf("沒有找到編號%d的節點,不能修改\n", newHeroNode.no);}}// 刪除節點// head不能動, 因此我們需要一個temp輔助節點找到待刪除節點的前一個節點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; // temp后移}if(flag){ // 找到// 可以刪除temp.next = temp.next.next;}else{System.out.printf("要刪除的%d 節點不存在\n", no);}}// 第二種添加英雄的方式,根據排名將英雄插入到指定位置public void addByOrder(HeroNode heroNode){// 因為頭節點不能動,因此我們仍然通過一個輔助指針來幫助找到添加的位置// 因為是單鏈表,因此我們要找到temp是位于添加位置的前一個節點HeroNode temp = head;boolean flag = false;while(true){if(temp.next == null){// 說明temp已經在鏈表的最后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.printf("準備插入的英雄的編號%d已經存在,不能加入\n",heroNode.no);}else{// 插入到鏈表中heroNode.next = 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; // temp后移,指向下一個節點}} }// 定義HearNode,每個HearNode對象就是一個結點 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;}@Overridepublic String toString() {return "HeroNode [no=" + no + ", name=" + name + ", nickname="+ nickname + "]";}}

?

總結

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

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