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