Java数据结构与算法学习(7)-单链表按顺序插入节点、修改与删除

一、应用实例

在这里插入图片描述
在上一节,已经实现了不按编号顺序添加,这一节,需要实现按英雄编号顺序添加到链表的指定位置,修改和删除指定节点。

二、思路

1)插入节点

1.同样需要遍历链表,需要一个辅助变量temp。

2.找到相应的位置时,需要先将node.next = temp.next,再将temp.next = node 这样就完成了添加。

3.相应的位置就是temp.next.no > node.no,即某节点的下一位的编号恰好大于新节点node.no

4.如果遍历到temp.next = = null时,说明链表到达结尾;
如果遍历到temp.next.no == node.no,这就说明该编号已存在,无法添加。

2)修改节点

1.首先需要判断链表是否为空。

2.需要遍历链表,所以需要一个辅助变量temp

3.设定一个flag初始值为false,如果找到对应编号,则对flag赋值为true

4.最后对flag判断,为true,就修改对应temp节点的值,false则输出未找到指定节点

3)删除节点

1.开头同样需要一个链表非空判断
2.同样的也是遍历链表,需要辅助变量temp,但是这里的temp必须指向要删除节点的前一个节点
3.同样需要一个flag,初始值为false,找到指定节点后,赋值为true
4.最后判断flag,为true,就将temp.next = temp.next.next 即可,未找到 则输出 未找到指定节点。

三、代码实现

插入节点的方法

public void addByOrder(HeroNode node) {
		HeroNode temp = head;
		//这里的标识用于检测编号是否有相同的
		boolean flag = false;
		while(true) {
			if(temp.next == null) {
				break;
			}
			if(temp.next.no>node.no) {
				break;
			}else if(temp.next.no == node.no) {
				flag = true;
				break;
			}
			temp = temp.next;
		}
		if(flag) {
			System.out.println("编号"+node.no+"已存在,添加失败!");
		}else {
			node.next = temp.next;
			temp.next = node;
		}
	}

修改节点的方法:

	public void update(HeroNode newHeroNode) {
		if(head.next == null) {
			System.out.println("链表为空,无法修改节点!");
			return;
		}
		HeroNode temp = head.next;
		boolean flag = false;
		while(true) {
			if(temp == null) {
				break;
			}
			if(temp.no == newHeroNode.no) {
				flag = true;
				break;
			}
			temp = temp.next;
		}
		if(flag) {
			temp.name = newHeroNode.name;
			temp.nickName = newHeroNode.nickName;
		}else {
			System.out.println("未找到相同编号的节点,修改操作失败!");
		}
	}

删除节点的方法

public void delete(int no) {
		if(head.next == null) {
			System.out.println("链表为空,无法删除节点!");
			return;
		}
		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.println("未找到编号为"+no+"的节点!");
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值