1. 程式人生 > 實用技巧 >單向連結串列簡單實現-->根據排名插入指定位置

單向連結串列簡單實現-->根據排名插入指定位置

程式碼實現如下:

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 list = new SingleLinkedList(); //加入 list.addByOrder(hero1); list.addByOrder(hero4); list.addByOrder(hero3); list.addByOrder(hero2); list.addByOrder(hero2); //顯示 list.list(); } }
//定義SingleLinkedList 管理物件 class SingleLinkedList{ //初始化頭結點 頭結點不要動 private HeroNode head = new HeroNode(0, "", ""); //新增到單向連結串列 //思路 當不考慮編號順序時 //1.找到當前連結串列的最後節點 //2.將最後這個節點的next指向新的節點 public void add(HeroNode heroNode){ //因為head節點不能動 因此我們需要一個輔助變數 temp HeroNode temp = head;
//遍歷連結串列找到最後 while(true){ //找到連結串列的最後 if(temp.next==null){ break; } //如果不是最後一個 temp後移 temp = temp.next; } temp.next = heroNode; } //第二種方式在新增英雄時,根據排名將英雄插入到治黨的位置 //(如果有排名,則新增失敗並給出提示) public void addByOrder(HeroNode heroNode){ //因為head節點不能動 因此我們仍然需要一個輔助變數 temp 來幫助我們找到新增的位置 //因為是單鏈表,因此我們找的temp 是新增位置的前一個節點 否則不插入 HeroNode temp = head; boolean flag = false;//表示新增的編號是否存在,預設fasle //遍歷連結串列找到最後 while(true){ //找到連結串列的最後 if(temp.next==null){//說明temp 已經在連結串列的最後 break; } if(temp.next.no>heroNode.no){//位置找到 就在temp後面插入 break; }else if(temp.next.no==heroNode.no){//說明編號存在 flag = true; break; } //如果不是最後一個 temp後移 temp = temp.next; } 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.toString()); 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) { super(); this.no = no; this.name = name; this.nickname = nickname; } @Override public String toString() { return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname + "]"; } }

測試列印:

準備加入的編號2已經存在
HeroNode [no=1, name=宋江, nickname=及時雨]
HeroNode [no=2, name=盧俊義, nickname=玉麒麟]
HeroNode [no=3, name=吳用, nickname=智多星]
HeroNode [no=4, name=林沖, nickname=豹子頭]