双向链表的(CRUD)
生活随笔
收集整理的這篇文章主要介紹了
双向链表的(CRUD)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
代碼實現(CRUD)
package com.atguigu.linkedlist;/*** @創建人 wdl* @創建時間 2021/3/19* @描述*/ public class DoubleLinkedListDemo {public static void main(String[] args) {//測試System.out.println("雙向鏈表的測試");HeroNode2 hearo1 = new HeroNode2(1, "宋江", "及時雨");HeroNode2 hearo2 = new HeroNode2(2, "盧俊義", "玉麒麟");HeroNode2 hearo3 = new HeroNode2(3, "吳用", "智多星");HeroNode2 hearo4 = new HeroNode2(4, "林沖", "及時釘釘雨");//創建一個雙向鏈表DoubleLinkedList doubleLinkedList = new DoubleLinkedList();doubleLinkedList.add(hearo1);doubleLinkedList.add(hearo2);doubleLinkedList.add(hearo3);doubleLinkedList.add(hearo4);doubleLinkedList.list();//修改HeroNode2 newHeroNode = new HeroNode2(4, "公孫勝", "入云龍");doubleLinkedList.update(newHeroNode);System.out.println("修改后的鏈表");doubleLinkedList.list();//刪除doubleLinkedList.del(3);System.out.println("刪除后的鏈表");doubleLinkedList.list();} } //創建一個雙向鏈表的類 class DoubleLinkedList{//先初始化一個頭結點,頭節點不要動,不存放具體的數據private HeroNode2 head=new HeroNode2(0,"","");//返回頭節點public HeroNode2 getHead(){return head;}//顯示鏈表[遍歷]public void list() {//判斷鏈表是否為空if (head.next == null) {System.out.println("鏈表為空");return;}//因為頭節點不能動,因此我們需要一個輔助變量來遍歷HeroNode2 temp = head.next;while (true) {//判斷是否到鏈表最后if (temp == null) {break;}//輸出節點的信息System.out.println(temp.toString());//將temp后移,一定要小心temp = temp.next;}}//添加一個節點到雙向鏈表最后public void add(HeroNode2 heroNode){//因為head節點不能動,因此我們需要一個輔助遍歷tempHeroNode2 temp=head;//遍歷鏈表,找到最后while(true){//找到鏈表的最后if(temp.next==null){break;}//如果沒有找到最后,將temp后移temp=temp.next;}//當退出while循環時,temp就指向了鏈表的最后//形成雙向鏈表temp.next=heroNode;heroNode.pre=temp;}//修改一個節點的內容,和單向鏈表一樣,// 只是節點的類型改為HeroNode2public void update(HeroNode2 newHeroNode) {//判斷是否為空if (head.next == null) {System.out.println("鏈表為空");return;}//找到需要修改的節點,根據no編號//定義一個輔助變量HeroNode2 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("沒有找到編號" + temp.no + "的節點,不能修改");}}//從雙向鏈表中刪除一個節點//說明//1.對于雙向鏈表,我們可以直接找到刪除的這個節點//2.找到后,自我刪除即可public void del(int no) {//判斷當前鏈表是否為空if (head.next==null){//空鏈表System.out.println("鏈表為空,無法刪除");return;}HeroNode2 temp = head.next;//輔助變量(指針)boolean flag = false;//標志是否找到待刪除節點while (true) {if (temp == null) {//已經到鏈表的最后break;}if (temp.no == no) {//找到的待刪除節點的前一個節點tempflag = true;break;}temp = temp.next;//temp后移,遍歷}//判斷flagif (flag) {//找到//可以刪除temp.pre.next=temp.next;//這里我們的代碼有問題?//如果是最后一個節點,就不要執行下面這句話,否則出現空指針if(temp.next!=null){temp.next.pre=temp.pre;}} else {System.out.println("要刪除的" + no + "節點不存在");}}}//定義HeroNode,每個HeroNode對象就是一個節點 class HeroNode2{public int no;public String name;public String nickname;public HeroNode2 next;//指向下一個節點,默認為nullpublic HeroNode2 pre;//指向前一個節點,默認為null//構造器public HeroNode2(int no,String name,String nickname){this.no=no;this.name=name;this.nickname=nickname;}//為了顯示方法,我們重寫toString@Overridepublic String toString() {return "HeroNode{" +"no=" + no +", name='" + name + '\'' +", nickname='" + nickname + '\'' + // ", next=" + next +'}';} }總結
以上是生活随笔為你收集整理的双向链表的(CRUD)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 乱设置路油器,造成不能上网,怎么办?
- 下一篇: 生成方法中参数的注释