leetcode203-Remove Linked List Elements

题目

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6

输出:[1,2,3,4,5]

示例 2:

输入:head = [], val = 1

输出:[]

分析

可以先处理掉头结点=val的情况,然后因为要删除一个结点,删除一个结点的时候肯定需要知道被删除结点的上一个结点,所以用一个哨兵记录当前结点,一个记录上一个结点,如果当前结点和val相等那么更新上一个结点的next指针,如果不相等那就更新上一个结点

java 复制代码
public class LinkNode {
	int val;
	LinkNode next;

	public LinkNode(int data) {
		this.val = data;
		this.next = null;
	}
}
public class LinkList {
	LinkNode head;
	public LinkList() {
		this.head = null;
	}
	public LinkNode getHead() {
		return this.head;
	}
	//添加元素
	public void addNode(int data) {
		LinkNode node = new LinkNode(data);
		if (this.head == null) {
			this.head = node;
		} else {
			LinkNode cur = this.head;
			while(cur.next != null) {
				cur = cur.next;
			}
			cur.next = node;
		}
	}
	//正序打印
	public void print(LinkNode node) {
		while(node != null) {
			System.out.print(node.val);
			System.out.print(" ");
			node = node.next;
		}
		System.out.println();
	}
	public void deleteDupl(int val) {
		LinkNode p = this.head;
		while(this.head != null && this.head.val == val) {
			this.head = this.head.next;
		}
		if(this.head == null) {
			return;
		}
		LinkNode prev = this.head;
		LinkNode cur = this.head.next;
		while(cur != null) {
			if(cur.val == val) {
				prev.next = cur.next;
			} else {
				prev = cur;
			}
			cur = cur.next;
		}
		print(this.head);
	}
}
public class removeLinkedListElements {
	public static void main(String[] args) {
		LinkList list = new LinkList();
		list.addNode(1);
		list.addNode(2);
		list.addNode(6);
		list.addNode(3);
		list.addNode(4);
		list.addNode(5);
		list.addNode(6);
		list.deleteDupl(6);
		list = new LinkList();
		list.addNode(6);
		list.addNode(6);
		list.addNode(6);
		list.deleteDupl(6);
	}
}
相关推荐
莫叫石榴姐8 分钟前
SQL百题斩:从入门到精通,一站式解锁数据世界
大数据·数据仓库·sql·面试·职场和发展
学Linux的语莫10 分钟前
机器学习数据处理
java·算法·机器学习
找不到、了10 分钟前
JVM的即时编译JIT的介绍
java·jvm
earthzhang202141 分钟前
【1007】计算(a+b)×c的值
c语言·开发语言·数据结构·算法·青少年编程
西瓜er44 分钟前
JAVA:Spring Boot 集成 FFmpeg 实现多媒体处理
java·spring boot·ffmpeg
你总是一副不开心的样子(´ . .̫ .1 小时前
一、十天速通Java面试(第三天)
java·面试·职场和发展·java面试
迎風吹頭髮1 小时前
UNIX下C语言编程与实践63-UNIX 并发 Socket 编程:非阻塞套接字与轮询模型
java·c语言·unix
我是华为OD~HR~栗栗呀1 小时前
23届考研-Java面经(华为OD)
java·c++·python·华为od·华为·面试
Javatutouhouduan1 小时前
Java程序员如何深入学习JVM底层原理?
java·jvm·java面试·后端开发·java架构师·java程序员·互联网大厂
王嘉俊9251 小时前
设计模式--享元模式:优化内存使用的轻量级设计
java·设计模式·享元模式