Skip to content

3217. Delete Nodes From Linked List Present in Array 👍

  • Time: $O(|\texttt{nums}| + |\texttt{head}|)$
  • Space: $O(|\texttt{nums}|)$
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class Solution {
 public:
  ListNode* modifiedList(vector<int>& nums, ListNode* head) {
    ListNode dummy(0, head);
    unordered_set<int> numsSet{nums.begin(), nums.end()};

    for (ListNode* curr = &dummy; curr->next != nullptr;)
      if (numsSet.contains(curr->next->val))
        curr->next = curr->next->next;
      else
        curr = curr->next;

    return dummy.next;
  }
};
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
class Solution {
  public ListNode modifiedList(int[] nums, ListNode head) {
    ListNode dummy = new ListNode(0, head);
    Set<Integer> numsSet = Arrays.stream(nums).boxed().collect(Collectors.toSet());

    for (ListNode curr = dummy; curr.next != null;)
      if (numsSet.contains(curr.next.val))
        curr.next = curr.next.next;
      else
        curr = curr.next;

    return dummy.next;
  }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
class Solution:
  def modifiedList(
      self,
      nums: list[int],
      head: ListNode | None,
  ) -> ListNode | None:
    dummy = ListNode(0, head)
    numsSet = set(nums)

    curr = dummy
    while curr.next:
      if curr.next.val in numsSet:
        curr.next = curr.next.next
      else:
        curr = curr.next

    return dummy.next