美文网首页leetcode算法
leetcode链表之分隔链表

leetcode链表之分隔链表

作者: 小奚有话说 | 来源:发表于2022-03-25 19:36 被阅读0次

    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
    

    相关文章

      网友评论

        本文标题:leetcode链表之分隔链表

        本文链接:https://www.haomeiwen.com/subject/cpmdjrtx.html