题目分析:
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
解题思路:
就用最简单的构建两个新的链表,然后把大于目标的放到一个链表,小于目标的的放到一起,然后再连接起来就可以了。
测试代码:(Runtime: 40 ms, faster than 97.07%,非提交代码,提交代码在下面)
# Definition for singly-linked list.
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def print_listNode(listNode: ListNode):
if not listNode:
print(None)
return
bf_listNode = listNode
while bf_listNode.next:
print(bf_listNode.val, end='-->')
bf_listNode = bf_listNode.next
print(bf_listNode.val)
def creat_listNode(nums: list):
if not nums: return None
bf_head = head = ListNode(nums[0])
for i in range(1, len(nums)):
head.next = ListNode(nums[i])
head = head.next
head.next = None
return bf_head
class Solution:
def partition(self, head: ListNode, x: int) -> ListNode:
min_head = ListNode(0)
max_head = ListNode(0)
p = head
bf_min_head = min_head
bf_max_head = max_head
while p:
if p.val < x:
min_head.next = ListNode(p.val)
min_head = min_head.next
else:
max_head.next = ListNode(p.val)
max_head = max_head.next
p = p.next
min_head.next = bf_max_head.next
return bf_min_head.next
print_listNode(Solution().partition(creat_listNode([1,4,3,2,5,2]), 3))
print_listNode(Solution().partition(creat_listNode([1]), 0))
提交代码:(Runtime: 40 ms, faster than 97.07%)
class Solution:
def partition(self, head: ListNode, x: int) -> ListNode:
min_head = ListNode(0)
max_head = ListNode(0)
p = head
bf_min_head = min_head
bf_max_head = max_head
while p:
if p.val < x:
min_head.next = ListNode(p.val)
min_head = min_head.next
else:
max_head.next = ListNode(p.val)
max_head = max_head.next
p = p.next
min_head.next = bf_max_head.next
return bf_min_head.next