12.9.8删除链表数据

链表作为动态数组除了可以任意的进行长度的扩充外,还可以实现指定数据的删除操作,由于链表是一个Node对象的集合,所以在删除数据时需要考虑以下两种情况。
情况一:要删除的数据是根节点。

在这里插入图片描述
情况二:要删除的是子节点
在这里插入图片描述

1、【ILink】在接口中增加一个数据删除的方法

/**
	 * 删除指定内容的数据,需要利用equals()方法进行比较
	 * @param data要删除的数据
	 */
	public void remove(E data);

2、【Link.Node】在Node类中追加节点删除操作。

        /**
		 * 删除指定数据对应的节点内容
		 * @param previous 要删除节点的上一个节点
		 * @param data 要删除的数据
		 */
		public void removeNode(Node previous,E data) {
			 if(this.data.equals(data)) {           //数据内容比较
				 previous.next=this.next;   //【删除】空出当前节点
				 
			 } else {                        //数据内容不匹配
				 if(this.next!=null) {            //有后续节点
					 this.next .removeNode(this, data);     //向后继续删除
				 }
			 }
		}

3、【Link】在子类中实现节点的删除

@Override
		public void remove(E data) {
			if(this.contains(data)) {           //判断数据是否存在
				if(this.root.data .equals(data)) {   //根节点为要删除节点
					this.root =this.root .next;     //修改根节点引用
				}else {
					this.root .next .removeNode(this.root , data);
				}
				this.count--;      //元素数量减少
			}
			
		}

Link子类需要进行根节点的存储,所以对于根节点的数据删除将由Link子类完成,而对于子节点的删除将由Node.removeNode()方法处理。元素一旦删除成功后,需要对count成员属性进行修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值