連結串列-單鏈表
阿新 • • 發佈:2020-07-27
1、連結串列的介紹
2、單鏈表的例項應用
包括節點的插入、修改和刪除(很簡單,我就不具體寫步驟了,直接上程式碼!)
public class SingleLinkedListDemo { public static void main(String[] args) { HeroNode node1 = new HeroNode(1, "宋江", "及時雨"); HeroNode node2 = new HeroNode(2, "盧俊義", "玉麒麟"); HeroNode node3 = new HeroNode(3, "吳用", "智多星"); HeroNode node4= new HeroNode(4, "林沖", "豹子頭"); SingleLinkedList list = new SingleLinkedList(); list.addByOrder(node1); list.addByOrder(node4); list.addByOrder(node3); list.addByOrder(node2); list.list(); //修改節點 System.out.println("================================="); HeroNode newNode= new HeroNode(2, "廬州太太", "玉麒麟~~"); list.update(newNode); list.list(); //刪除節點 System.out.println("================================="); list.delete(node1); list.delete(node2); list.list(); } } //定義一個LinkedList 來管理我們的英雄 class SingleLinkedList{//定義一個頭節點,不存物件 private HeroNode head = new HeroNode(0,"",""); //新增節點到連結串列 // 第一種新增英雄的方式,直接在連結串列尾部新增 public void add(HeroNode hero){ HeroNode temp = head; while(true){ if(temp.next==null){ break; } temp=temp.next; } temp.next=hero; } // 第二種新增英雄的方式,根據排名將英雄插入到指定的位置 public void addByOrder(HeroNode hero){ HeroNode temp = head; boolean flag = false; //標誌和新增的節點和連結串列中節點的編號沒有重複 while(true){ if(temp.next==null){ break; } if(temp.next.no>hero.no){ break; }else if(temp.next.no == hero.no){ flag = true; break; } temp=temp.next; } if(flag){ System.out.println("連結串列中已存在要新增的節點!"); }else{ hero.next = temp.next; temp.next = hero; } } //單鏈表的修改 public void update(HeroNode hero){ if(head.next==null){ System.out.println("連結串列為空!!"); } HeroNode temp = head; boolean flag = false; //標誌是否在連結串列中找到 no==hero.no 的節點 while(true){ if(temp.next==null){ break; } if(temp.next.no==hero.no){ flag=true; break; } temp=temp.next; } if(flag){ temp.next.name =hero.name; temp.next.nickName =hero.nickName; }else{ System.out.printf("未在連結串列中找到no為%d的節點",hero.no); } } //節點的刪除 public void delete(HeroNode hero){ if(head.next==null){ System.out.println("連結串列為空!!"); } HeroNode temp = head; boolean flag = false; //標誌是否在連結串列中找到待刪除節點 while(true){ if(temp.next==null){ break; } if(temp.next.no==hero.no){ flag=true; break; } temp=temp.next; } if(flag){ temp.next=temp.next.next; //刪除節點 }else{ System.out.printf("no為%d的節點不存在",hero.no); } } //顯示連結串列【遍歷】 public void list(){ if(head.next==null){ System.out.println("連結串列為空!"); return; } HeroNode temp = head; while(true){ if(temp.next==null){ break; } temp=temp.next; System.out.println(temp); } } } //定義一個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 + '\''+'}' ; } }