双向链表指定位置插入节点(链表排序问题)

指定位置插入节点
先找到要插入的位置(通过节点的属性,比如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;
			
			
		}
	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值