leetcode刷题:链表01 (移除链表元素)

63 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路 力扣题目链接

题意:删除链表中等于给定值 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的那一刻,我哭的好大声

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

还是说说吧, 注意头结点的删除和其他结点是不一样的。需要单独处理。 在这里插入图片描述