本文已参与「新人创作礼」活动,一起开启掘金创作之路 力扣题目链接
题意:删除链表中等于给定值 val 的所有节点。
示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1
输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7
输出:[]
package com.programmercarl.linkedlist;
import com.programmercarl.linkedlist.domain.ListNode;
/**
* @ClassName removeElements
* @Descriotion 203. 移除链表元素
* @Author nitaotao
* @Date 2022/5/2 17:33
* @Version 1.0
* https://leetcode-cn.com/problems/remove-linked-list-elements/
**/
public class RemoveElements {
public ListNode removeElements(ListNode head, int val) {
if (head == null) {
return null;
}
//head是头结点,是第一个结点
ListNode node = head;
//先判断第一位
while (node.val == val) {
if (node.next != null) {
//直接舍弃结点
node = node.next;
//头结点移位
head = node;
} else {
//如果只有一个头结点,而且是目标值,直接返回null
return null;
}
}
//如果第一位不为目标值
//如果当前结点有下一个元素
while (node.next != null) {
//是目标值
if (node.next.val == val) {
//判断有无下下个结点
if (node.next.next != null) {
node.next = node.next.next;
} else {
node.next = null;
}
} else {
//元素后移
node = node.next;
}
}
return head;
}
}
不想多说。AC的那一刻,我哭的好大声
还是说说吧, 注意头结点的删除和其他结点是不一样的。需要单独处理。