题目:
面试题 02.04. 分割链表。
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你不需要 保留 每个分区中各节点的初始相对位置。
链接:https://leetcode-cn.com/problems/partition-list-lcci
示例:
输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]输入:head = [2,1], x = 2
输出:[1,2]
思路:
新建两个链表,分别用于存储小于特定值的和大于等于特定值的,最后将两个链表合并,使数值小的在前大的后,返回合并后的链表。
代码:
# 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:
sml_dummy, big_dummy = ListNode(0), ListNode(0)
sml, big = sml_dummy, big_dummy
while head:
if head.val < x:
sml.next = head
sml = sml.next
else:
big.next = head
big = big.next
head = head.next
sml.next = big_dummy.next
big.next = None
return sml_dummy.next
时间复杂度O(n),空间复杂度O(n).