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]
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, 104].
1 <= Node.val <= 50
0 <= val <= 50
Solutions
Solution 1
Thinking
Removing nodes with value \(\textit{val}\) is a predecessor-pointer update, but the head itself may be deleted, so special-casing \(\textit{head}\) is messy.
A dummy node in front lets \(\textit{pre}\) inspect its successor: skip it when the value matches, otherwise advance. Return \(\textit{dummy}.\textit{next}\).
1 2 3 4 5 6 7 8 9101112131415
# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclassSolution:defremoveElements(self,head:ListNode,val:int)->ListNode:dummy=ListNode(-1,head)pre=dummywhilepre.next:ifpre.next.val!=val:pre=pre.nextelse:pre.next=pre.next.nextreturndummy.next