【Java】删除指定链表中的字符

博客介绍了删除指定链表中字符的两种方法。方法一是创建假结点,遍历链表,若值相等则跳过该结点;方法二则是定义新链表,将不相等的值放入新链表。最后还对链表为空的情况进行了处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

删除指定链表中的字符

方法1:

1.创建一个假结点:fake=new Node(1);//假结点,值为多少无所谓

使:fake.next=head;

Node c1=fake;

node c2=head;

2.当c2不为空时,

if(c2.value=value) //值相等,进行删除

{

      c1.next=c2.next; //就跳过了相等的这个值

}

else{

     c1=c2;

}

c2=c2.next;

3.最后返回fake.next;

方法2:

1.定义一个新链表,一开始为null; Node newNode=null;

2.创建 Node cur=head;

Node last = null; // 用来记录 newNode 链表的最后一个结点

3.当cur不为空时,将不相等的值放进新链表中

因为下面的代码会变更 cur.next,所以先存起来,ListNode next = cur.next;

1)// 把 cur 尾插到 newList

(1)如果新链表为空,相当于头插

cur.next = newList; newList = cur;

(2)以后尾插时,newList 不是空链表

last.next = cur;

2)负责更新 last,保证 last 始终是最后一个结点,last = cur; //

3)最后,cur = next

4.处理head等于null的情况

if (last != null) {

last.next = null; // 保证了最后一个结点的 next == null

}

5.返回newNode;

public static Node removeElements1(Node head,int value){
		if(head==null){
			return null;
		}
		//创建一个结点,让结点的下一个等于原来的第一个结点,这样最后就不用再考虑头结点
		Node fakeHead=new Node(1);
		fakeHead.next=head;
		Node prev=fakeHead;
		Node cur=head;
		while(cur!=null){
			if(cur.value==value){
				prev.next=cur.next;
			}
			else{
				prev=cur;
			}
			cur=cur.next;
		}
		return fakeHead.next;
	}
	public static Node removeElements2(Node head,int value){
		if(head==null){
			return null;
		}
		Node newNode=null;
		Node last=null;  //用来记录newNode链表中的最后一个结点
		Node cur=head;
		while(cur!=null){
			Node next=cur.next;
			if(cur.value!=value){
				//把cur尾插到newNode
				if(newNode==null){
					//第一次尾插时,newNode为空链表
					cur.next=newNode;
					newNode=cur;
				}
				else{
					//以后尾插时,newNode不再是空链表
					last.next=cur;
				}
				last=cur;//负责更新last,保证last始终是最后一个结点
			}
			cur=next;
		}
		if(last!=null){       //处理head==null的情况
			last.next=null;  //保证最后一个结点的next=null
		}
		return newNode;
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值