题目:
实现双向链表(带头结点)的添加(默认) (默认添加到双向链表的最后)
代码:
public void add(HeroNode heroNode) {
//因为head节点不能动,因此我们需要一个辅助遍历temp
HeroNode temp = head;
//遍历链表,找到最后一个元素
while (temp.next != null) {
temp = temp.next;
}
// 插入到最后
temp.next = heroNode;
heroNode.pre = temp;
}
题目:
实现双向链表(带头结点)的添加(有序添加) (按照编号有序添加,重复不添加)
代码:
public void addByOrder(HeroNode heroNode) {
// 因为头节点不能动,因此我们仍然通过一个辅助指针(变量)来帮助找到添加的位置
HeroNode temp = head;
boolean flag = false;
boolean flag1 = false;
while (true) {
if (temp.next == null)
break;
if (temp.next.no > heroNode.no) {
flag1 = true;
break;
}
if (temp.next.no == heroNode.no) {
// 已经存在该编号(不可重复)
flag = true;
break;
}
// 没满足以上,后移下一次节点继续找
temp = temp.next;
}
// 对 flag 进行判断
if (flag)
// 不能添加,说明编号已经存在
System.out.printf("编号 %d 已存在,加入失败\n", heroNode.no);
else {
if(flag1){
//插中间
temp.next.pre = heroNode;
heroNode.next = temp.next;
temp.next = heroNode;
heroNode.pre = temp;
}
else{
//插最末
temp.next = heroNode;
temp = heroNode.pre;
}
}
}