【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
posted @ 2019-11-28 14:37  961897  阅读(117)  评论(0编辑  收藏  举报