【Leetcode链表】分隔链表(86)
题目
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
解答
思路:小于的用一个头结点,大于等于的用一个头结点,然后将二者相连。O(n),O(1)
# 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
                    
                
                
            
        
浙公网安备 33010602011771号