LeetCode-in-Java

3217. Delete Nodes From Linked List Present in Array

Medium

You are given an array of integers nums and the head of a linked list. Return the head of the modified linked list after removing all nodes from the linked list that have a value that exists in nums.

Example 1:

Input: nums = [1,2,3], head = [1,2,3,4,5]

Output: [4,5]

Explanation:

Remove the nodes with values 1, 2, and 3.

Example 2:

Input: nums = [1], head = [1,2,1,2,1,2]

Output: [2,2,2]

Explanation:

Remove the nodes with value 1.

Example 3:

Input: nums = [5], head = [1,2,3,4]

Output: [1,2,3,4]

Explanation:

No node has value 5.

Constraints:

Solution

import com_github_leetcode.ListNode;

/*
 * 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; }
 * }
 */
public class Solution {
    public ListNode modifiedList(int[] nums, ListNode head) {
        int maxv = 0;
        for (int v : nums) {
            maxv = Math.max(maxv, v);
        }
        boolean[] rem = new boolean[maxv + 1];
        for (int v : nums) {
            rem[v] = true;
        }
        ListNode h = new ListNode(0);
        ListNode t = h;
        ListNode p = head;
        while (p != null) {
            if (p.val > maxv || !rem[p.val]) {
                t.next = p;
                t = p;
            }
            p = p.next;
        }
        t.next = null;
        return h.next;
    }
}