next == null]
next
指向新的節點//初始化一個頭結點,裏面什麼都不放 HeroNode head = new HeroNode(0, "", ""); /** * 向鏈表中添加一個節點 * 不考慮編號順序 */ public void add(HeroNode heroNode) { //由於頭節點是不能動的,使用中間變量temp來保存頭節點 HeroNode temp = head; //遍歷節點,找到最後一個節點【經過最後一個節點next指向爲 null】 while (true) { if (temp.next == null) { //找到最後一個節點 break; } //沒有找到就將temp後移一個 temp = temp.next; } // 當循環退出的時候temp就指向節點的最後一個 temp.next = heroNode; }
找到新添加節點的位置,經過輔助變量(temp
)[遍歷找到新節點的位置]java
新的節點.next = temp.next
git
temp.next = 新的節點
github
/** * 考慮排序編號添加 * * @param heroNode */ public void addByOrder(HeroNode heroNode) { //由於頭節點是不能動的,使用輔助變量temp尋找位置 HeroNode temp = head; //用來表明當前添加的節點的編號是否存在,默認false不存在 boolean flag = false; 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 { //在temp後面進行添加 heroNode.next = temp.next; temp.next = heroNode; } }
temp.no == newHeroNode.no
判斷是否爲須要修改的節點/** * 更新節點 * * @param newHeroNode */ public void update(HeroNode newHeroNode) { if (head.next == null) { System.out.println("當前鏈表爲空"); return; } //由於頭節點是不能動的,使用中間變量temp來保存頭節點 HeroNode temp = head; boolean flag = false; //用來表示鏈表中是否存在須要修改的節點 while (true) { if (temp.next == null) { break; } if (temp.no == newHeroNode.no) { flag = true; break; } temp = temp.next; //temp後移 } if (flag) { temp.name = newHeroNode.name; temp.nickName = newHeroNode.nickName; } else { System.out.printf("沒有找到編號爲:%d 節點", newHeroNode.no); } }
temp
temp.next = temp.next.next
/** * 刪除節點 * * @param no */ public void del(int no) { if (head.next == null) { System.out.println("當前鏈表爲空"); return; } //由於頭節點是不能動的,使用中間變量temp來保存頭節點 HeroNode temp = head; boolean flag = false; //表示是否找到須要刪除的節點 while (true) { if (temp.next == null) { break; } if (temp.next.no == no) { flag = true; break; } temp = temp.next; } //刪除須要刪除的節點 if (flag) { temp.next = temp.next.next; } else { System.out.printf("不存在編號爲 %d 的節點 刪除失敗\n", no); } }
dataStructures: giteecode
dataStructures: githubblog