Welcome to Subscribe On Youtube

203. Remove Linked List Elements

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]

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

  • /**
     * 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 {
        public ListNode removeElements(ListNode head, int val) {
            ListNode dummy = new ListNode(-1, head);
            ListNode pre = dummy;
            while (pre.next != null) {
                if (pre.next.val != val)
                    pre = pre.next;
                else
                    pre.next = pre.next.next;
            }
            return dummy.next;
        }
    }
    
  • class Solution {
    public:
        ListNode* removeElements(ListNode* head, int val) {
            ListNode* dummy = new ListNode();
            dummy->next = head;
            ListNode* p = dummy;
            while (p->next) {
                if (p->next->val == val) {
                    p->next = p->next->next;
                } else {
                    p = p->next;
                }
            }
            return dummy->next;
        }
    };
    
    
  • # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    class Solution:
        def removeElements(self, head: ListNode, val: int) -> ListNode:
            dummy = ListNode(-1, head)
            pre = dummy
            while pre.next:
                if pre.next.val != val:
                    pre = pre.next
                else:
                    pre.next = pre.next.next
            return dummy.next
    
    
  • func removeElements(head *ListNode, val int) *ListNode {
    	dummy := new(ListNode)
    	dummy.Next = head
    	p := dummy
    	for p.Next != nil {
    		if p.Next.Val == val {
    			p.Next = p.Next.Next
    		} else {
    			p = p.Next
    		}
    	}
    	return dummy.Next
    }
    
  • /**
     * Definition for singly-linked list.
     * class ListNode {
     *     val: number
     *     next: ListNode | null
     *     constructor(val?: number, next?: ListNode | null) {
     *         this.val = (val===undefined ? 0 : val)
     *         this.next = (next===undefined ? null : next)
     *     }
     * }
     */
    
    function removeElements(head: ListNode | null, val: number): ListNode | null {
        const dummy: ListNode = new ListNode(0, head);
        let cur: ListNode = dummy;
        while (cur.next != null) {
            if (cur.next.val === val) {
                cur.next = cur.next.next;
            } else {
                cur = cur.next;
            }
        }
        return dummy.next;
    }
    
    
  • public class Solution {
        public ListNode RemoveElements(ListNode head, int val) {
            ListNode newHead = null;
            ListNode newTail = null;
            var current = head;
            while (current != null)
            {
                if (current.val != val)
                {
                    if (newHead == null)
                    {
                        newHead = newTail = current;
                    }
                    else
                    {
                        newTail.next = current;
                        newTail = current;
                    }
                }
                current = current.next;
            }
            if (newTail != null) newTail.next = null;
            return newHead;
        }
    }
    
  • // Definition for singly-linked list.
    // #[derive(PartialEq, Eq, Clone, Debug)]
    // pub struct ListNode {
    //   pub val: i32,
    //   pub next: Option<Box<ListNode>>
    // }
    //
    // impl ListNode {
    //   #[inline]
    //   fn new(val: i32) -> Self {
    //     ListNode {
    //       next: None,
    //       val
    //     }
    //   }
    // }
    impl Solution {
        pub fn remove_elements(head: Option<Box<ListNode>>, val: i32) -> Option<Box<ListNode>> {
            let mut dummy = Box::new(ListNode { val: 0, next: head });
            let mut cur = &mut dummy;
            while let Some(mut node) = cur.next.take() {
                if node.val == val {
                    cur.next = node.next.take();
                } else {
                    cur.next = Some(node);
                    cur = cur.next.as_mut().unwrap();
                }
            }
            dummy.next.take()
        }
    }
    
    

All Problems

All Solutions