【Leetcode鏈表】分隔鏈表(86)

題目

給定一個鏈表和一個特定值 x,對鏈表進行分隔,使得全部小於 x 的節點都在大於或等於 x 的節點以前。code

你應當保留兩個分區中每一個節點的初始相對位置。it

示例:io

輸入: head = 1->4->3->2->5->2, x = 3
輸出: 1->2->2->4->3->5

解答

思路:小於的用一個頭結點,大於等於的用一個頭結點,而後將兩者相連。O(n),O(1)class

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def partition(self, head: ListNode, x: int) -> ListNode:
        if not head:
            return head
        p = ListNode(-100)
        q = ListNode(-100)
        tp, tq = p, q

        while head:
            if head.val < x:
                p.next = head
                p = head
            else:
                q.next = head
                q = head
            head = head.next
        p.next = q.next = None  # 兩條鏈表收尾
        p.next = tq.next
        return tp.next
相關文章
相關標籤/搜索