链表节点的删除操作

#链表的普通删除
第一种:头部删除 head移动到下一个元素
第二种:尾部删除 倒数第二个节点指针指向null
第三种:中间删除 a前一个的指针 指向a的后一个

public class 普通删除 {
	int size;
	public Node remove(int index){
		if(index<0||index>=size){throw new IndexOutOfBoundsException"超出范围";}
		Node removeNode=null;
			if(index==0){//删除头节点:head移动到下一个元素
			removeNode=head;
			head=head.next;//head.next指向head
			if(size==1){last=null;}
		}else if(index==size-1){//删除节点是末尾节点:倒数第二个next的指针指向null
			Node prevNode=get(index-1);//最后一个节点的前一个节点
			//prevNode.next指向要删除的节点
			removeNode=prevNode.next;
			//给removeNode指向为空
			removeNode.next = null;
			//prevNode就是现在最后一个节点了
			last=prevNode;
		}else {//删除中间节点
			Node prevNode=get(index-1);//中间节点的前面节点
			Node nextNode=prevNode.next.next;//prev下一个的下一个赋值给nextNode
			//prevNode.next指向要删除的节点
			prevNode.next=nextNode;			
		}
		size--;//每次删除,链表的长度都要减
		return removeNode;
	}
}

删除指定数值的节点

1
定义pre指向头节点,cur指向头节点的下一个节点
接下来让两个指针不断向后移动,直到:
(1)cur指向的为空 or
(2)cur指向的节点为 要删除的节点

cur指向1,不需要删除【val=5】
2
同时指针右移,考察下一个节点:
cur指向5,与val相同,说明这个节点要删除
执行的操作:pre指向cur后面的(1直接指向9)

class Solution{
	public ListNode delete(ListNode head,int val){
		//链表的头节点和需要删除的相等,直接返回头节点的next指针
		if(head.val==val) return head.next;
		//否则的话,设置两个指针
		ListNode pre=head;//指向链表的头节点
		ListNode cur=head.next;//当前节点的下一个节点
		
		//接下来让两个指针不断向后面移动:
		while(cur!=null && cur.val !=val){
			pre=cur;
			cur=cur.next;
		}
		//走出来,说明要执行删除操作
		pre.next=cur.next;
		//最后返回链表的头节点
		return head;
	}
}

#根据索引删除链表
链表处理带索引的东西很麻烦(没有记序号)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值