Post

Leetcode 0203. Remove Linked List Elements

Given the `head` of a linked list and an integer `val`, remove all the nodes of the linked list that has `Node.val == val`, and return the new head.  Example 1:  Input: head = [1,2,6,3,4,5,6], val = 6, Output: [1,2,3,4,5] 

Description

Given the head of a linked list and an integer val, remove all the nodes of the linked list that has Node.val == val, and return the new head.

Example 1:

Input: head = [1,2,6,3,4,5,6], val = 6
Output: [1,2,3,4,5]

Merge sample

Example 2:

Input: head = [], val = 1
Output: []

Example 3:

Input: head = [7,7,7,7], val = 7
Output: []

Constraints:

  • The number of nodes in the list is in the range [0, 10^4].
  • 1 <= Node.val <= 50
  • 0 <= val <= 50

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/**
 * 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 {
  /**
   * Iterative Approach
   * Analysis
   * Time Complexity: BigO(n)
   * Space Complexity: BigO(n)
   */
  public ListNode removeElements(ListNode head, int val) {
    ListNode headNode = new ListNode();
    ListNode tailNode = headNode;
    while (head != null) {
      if (head.val != val) {
        tailNode.next = new ListNode(head.val);
        tailNode = tailNode.next;
      }
      head = head.next;
    }
    return headNode.next;
  }

  /**
   * Two Pointers
   * Analysis
   * Time Complexity: BigO(n)
   * Space Complexity: BigO(1)
   */
  public ListNode removeElements(ListNode head, int val) {
    ListNode curr = head;
    ListNode prev = head;
    while (curr != null) {
      if (curr.val == val) {
        if (curr == head) {
          head = curr.next;
        }
        else {
          prev.next = curr.next;
        }
      }
      else {
        prev = curr;
      }
      curr = curr.next;
    }
    return head;
  }
}
This post is licensed under CC BY 4.0 by the author.