指定位置插入节点
先找到要插入的位置(通过节点的属性,比如id或者有序数字)
与单链表不同的时候插入后,next 和 pre 都要与前后节点相连
// 按排序插入节点
public void addByOrder(Node2 node) {
// 头节点不能动,通过辅助指针来找到添加的位置
Node2 temp = head;
boolean flag = false; // 标志添加的编号是否存在
while (true) {
if (temp.next == null) { // temp已经在链表的最后了
break;
}
if (temp.next.no > node.no) { // 位置找到
break;
} else if (temp.next.no == node.no) {
// 说明希望添加的node的编号已经存在
flag = true; // 说明编号存在
break;
}
temp = temp.next; // 后移,遍历当前链表
}
// 判断flag的值
if (flag) { // 如果flag=true,不能添加,说明编号已经存在
System.out.printf("准备插入的节点编号%d已经存在不能添加", node.no);
System.out.println();
} else {
// 插入到链表中,temp的后面
node.next = temp.next;
temp.next = node;
node.pre = temp;
node.next.pre = node;
}
}