编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。
示例:
输入: head = 3->5->8->5->10->2->1, x = 5 输出: 3->1->2->10->5->5->8
创建两个链表,一个存放小于 x
的节点,另一个存放大于等于 x
的节点,之后进行拼接即可。
# 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:
if head is None or head.next is None:
return head
left, right = ListNode(-1), ListNode(-1)
p, q = left, right
while head:
t = head.next
head.next = None
if head.val < x:
p.next = head
p = p.next
else:
q.next = head
q = q.next
head = t
p.next = right.next
return left.next
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode partition(ListNode head, int x) {
if (head == null || head.next == null) {
return head;
}
ListNode left = new ListNode(-1);
ListNode right = new ListNode(-1);
ListNode p = left, q = right;
while (head != null) {
ListNode t = head.next;
head.next = null;
if (head.val < x) {
p.next = head;
p = p.next;
} else {
q.next = head;
q = q.next;
}
head = t;
}
p.next = right.next;
return left.next;
}
}