86、分隔链表
文章出现的代码都是python3
题目:
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例1:
输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]
示例2:
输入:head = [2,1], x = 2
输出:[1,2]
思路:
题目有点像选择排序,这时想到用两个链表存储小于x和大于等于x的值,最后拼接在一起就可以了
代码:
class Solution:
def partition(self, head: ListNode, x: int) -> ListNode:
if not head: return head
# 存储小于x的链表
small = smallest = ListNode()
# 存储大于等于x的链表
large = largest = ListNode()
while head:
# 如果小于x,将该结点追加到small链表后,否则追加到large之后
if head.val < x:
small.next = head
small = small.next
else:
large.next = head
large = large.next
head = head.next
# 拼接两个链表,注意治理的smallest和largest的头结点是虚拟头结点,在拼接的时候应该排除
small.next = largest.next
large.next = None
return smallest.next
网友评论