【刷题打卡】203. 移除链表元素

90 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

203. 移除链表元素 - 力扣(LeetCode) (leetcode-cn.com)

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

示例 1:

image.png

输入: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
输出:[]

提示:

  • 列表中的节点数目在范围 [0, 10^4] 内
  • 1 <= Node.val <= 50
  • 0 <= val <= 50

二、思路分析:

  1. 设置虚拟头结点,然后设置一个指针,指向待删除结点的上一个结点\
  2. 遍历链表,将结点中与该值相同的结点删除;结点中的值与待删除的值不一样时,将指针下移

三、AC 代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {

      ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;
        ListNode prev = dummyHead;
        while(prev.next != null){
            if(prev.next.val == val){
                prev.next = prev.next.next;
            }else{
                prev = prev.next;
            }
        }

        return dummyHead.next;

    }
}

四、总结:

链表的定义具有递归的性质,因此链表题目常可以用递归的方法求解。递归的可以看下官方的题解。

范文参考:

203.移除链表元素(三种方法) - 移除链表元素 - 力扣(LeetCode) (leetcode-cn.com)

思路简单。性能高效,一看就懂 - 移除链表元素 - 力扣(LeetCode) (leetcode-cn.com)