一:單向鏈表:
(1):鏈表是以節點的形式存盤資料,節點物件中存盤了要保存的資料,
(2):單向鏈表中的每一個節點中都持有下一個節點的參考,通過上一個節點就可以找到下一個節點,依次串聯,所以想要遍歷整個單向鏈表就需要找到第一個節點,
(3):鏈表不同于陣列,在記憶體中不一定是連續的空間,由于是節點存盤,可以利用記憶體中零散的空間進行保存,只需持有下一個節點的地址即可,

二:接下來我們使用Java代碼實作單向鏈表(不是故意寫中文類名的,請勿噴)
public class 單向鏈表 { public static void main(String[] args) { HeroNode name1=new HeroNode(1,"小袁","世界上最帥的男人"); HeroNode name2=new HeroNode(2,"xx","xx"); HeroNode name3=new HeroNode(3,"ww","ww"); HeroNode name4=new HeroNode(4,"vv","xx"); SingleLinkedList singleLinkedList=new SingleLinkedList(); singleLinkedList.add1(name1); singleLinkedList.add1(name4); singleLinkedList.add1(name3); singleLinkedList.add1(name2); singleLinkedList.list(); System.out.println("修改后---------------"); HeroNode n=new HeroNode(2,"bb","bb"); singleLinkedList.update(n); singleLinkedList.list(); System.out.println("洗掉后--------------"); singleLinkedList.delete(2); singleLinkedList.list(); } } //管理資訊 class SingleLinkedList{ //定義頭節點,不存放具體資料 private HeroNode head=new HeroNode(0,"",""); //定義按順序添加方法 public void add1(HeroNode heroNode){ //定義輔助變數 HeroNode temp=head; //定義標志 boolean flag=false; while (true){ if(temp.next==null){ break; } if(temp.next.SerialNumber>heroNode.SerialNumber){ //說明位置找到,在temp后面插入 break; } else if(temp.next.SerialNumber==heroNode.SerialNumber){ //說明添加資訊已存在 flag=true; } //后移遍歷鏈表 temp=temp.next; } if(flag){ System.out.println("資訊已存在"); }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.next == null) { break; } if(temp.SerialNumber==newHeroNode.SerialNumber){ flag=true; break; } temp=temp.next; } if(flag){ temp.name=newHeroNode.name; temp.information=newHeroNode.information; }else { System.out.println("沒有找到"); } } //定義洗掉方法 public void delete(int SerialNumber){ HeroNode temp=head; boolean flag=false; while (true){ if(temp.next==null){ break; } if(temp.next.SerialNumber==SerialNumber){ flag=true; break; } temp=temp.next; } if(flag){ temp.next=temp.next.next; } } //遍歷 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=temp.next; } } } class HeroNode{ public int SerialNumber; public String name; public String information; //指向下一個節點 public HeroNode next; public HeroNode(int SerialNumber,String name,String information){ this.SerialNumber=SerialNumber; this.name=name; this.information=information; } @Override public String toString() { return "HeroNode{" + "SerialNumber=" + SerialNumber + ", name='" + name + '\'' + ", information='" + information + '\''; } }
運行結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/256631.html
標籤:其他
上一篇:TZOJ6556: 嗅探器
