题目:
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例:
输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]
思路:
题目要求是对于给定的特定值,要将小于它的值放在前面,大于它的值放在后面,这里构建两个链表,分别存放大于和小于这个数的节点,然后再将两个链表连接起来。
这里注意,对于大于给定值组成的链表,最后一个节点所指向的可能是空,可能不是空,如果原链表中的最后一个节点是大于给定值的,那链表2最后一个节点指向的就是空,如果原链表中的最后一个节点是小于给定值的,那链表2最后一个节点指向的就不是空,所以要将链表2的最后一个节点指向空,最后返回连接后的链表。
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def partition(self, head, x):
"""
:type head: ListNode
:type x: int
:rtype: ListNode
"""
if not head:
return head
dummy1,dummy2 = ListNode(0),ListNode(0)
cur1 = dummy1
cur2 = dummy2
while head:
if head.val < x:
cur1.next = head
cur1 = cur1.next
else:
cur2.next = head
cur2 = cur2.next
head = head.next
cur1.next = dummy2.next
cur2.next = None
return dummy1.next