2.1 移除链表元素(线性表-链表)——【LeeCode】

在这里插入图片描述
在这里插入图片描述

package com.lianbiao.java;
//203.移除链表元素
public class one {
	/*
	 * 总结:
	 * 主要是考虑头结点的处理:
	 * 1.可以设置一个虚拟头结点,这样原链表的所有节点就都可以按照统一的方式进行移除了
	 * 2.不添加虚结点方法,头结点单独处理
	 */

	//方法一:添加虚结点方法
	public ListNode removeElements(ListNode head, int val) {
		
		if(head == null) {//链表为空
			return head;
		}
		// 因为删除可能涉及到头节点,所以设置dummy节点,统一操作
		ListNode dummy = new ListNode(-1, head);
		ListNode pre = dummy;//定义一个辅助指针pre 紧紧跟着cur
		ListNode cur = head;//cur从head开始从前向后遍历
		while(cur != null) {
			if(cur.val == val) {
				pre.next = cur.next;
			}else {
				pre = cur;//其实就是使得pre向前走,且紧跟着cur
			}
			cur = cur.next;
		}
		return dummy.next;//注意dummy只是添加的一个虚结点,真正要返回的是dummy.next
    }
	
	
	//方法一:不添加虚结点方法
	public ListNode removeElements1(ListNode head, int val) {
		
		//首先处理头结点
		while(head != null && head.val == val) {//如果头结点就是val
			head = head.next;
		}
		//已经为null,提前退出
		if(head == null) {
			return head;
		}
		//已确定head.val不为空且 != val
		ListNode pre = head;//定义辅助指针
		ListNode cur = head.next;
		while(cur != null) {
			if(cur.val == val) {
				pre.next = cur.next;
			}else {
				pre = cur;
			}
			cur = cur.next;
		}
		return head;
    }
	
	
	
}

class ListNode {
	
	int val;
	ListNode next;

	ListNode(int val, ListNode next) { 
		this.val = val; 
		this.next = next; 
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DZSpace

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值