Description
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of the nodes in each of the two partitions.
For example,
Given 1->4->3->2->5->2 and x = 3,
return 1->2->2->4->3->5.
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
例如,
给定1->4->3->2->5->2 和 x = 3,
返回1->2->2->4->3->5.
Solution
构建两个新链表,小于x
的放在链表1
,大于或等于x
的放在链表2
,最后将链表1
的表尾指向链表2
的表头即可。
# -*- coding: utf-8 -*-
"""
Created on Sun Mar 18 15:35:41 2018
@author: Saul
"""
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def partition(self, head, x):
"""
:type head: ListNode
:type x: int
:rtype: ListNode
"""
head1 = ListNode(0)
head2 = ListNode(0)
phead1 = head1
phead2 = head2
tmp = head
while tmp:
if tmp.val < x:
phead1.next = tmp
tmp = tmp.next
phead1 = phead1.next
phead1.next = None
else:
phead2.next = tmp
tmp = tmp.next
phead2 = phead2.next
phead2.next = None
phead1.next = head2.next
head = head1.next
return head