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:
1 <= nums.length <= 105
1 <= nums[i] <= 105
nums
are unique.[1, 105]
.1 <= Node.val <= 105
nums
.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;
}
}