LeetCode Top Interview 150

86. Partition List

Medium

Given the head of a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

You should preserve the original relative order of the nodes in each of the two partitions.

Example 1:

Input: head = [1,4,3,2,5,2], x = 3

Output: [1,2,2,4,3,5]

Example 2:

Input: head = [2,1], x = 2

Output: [1,2]

Constraints:

Solution

from typing import Optional

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class Solution:
    def partition(self, head: Optional[ListNode], x: int) -> Optional[ListNode]:
        n_head = ListNode(0)
        n_tail = ListNode(0)
        ptr = n_tail
        temp = n_head
        while head is not None:
            n_next = head.next
            if head.val < x:
                n_head.next = head
                n_head = n_head.next
            else:
                n_tail.next = head
                n_tail = n_tail.next
            head = n_next
        n_tail.next = None
        n_head.next = ptr.next
        return temp.next