题目
编写程序以 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.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode partition(ListNode head, int x) {
ListNode small=new ListNode(-1);
ListNode sCur=small;
ListNode large=new ListNode(-1);
ListNode lCur=large;
while(head!=null){
if(head.val<x){
sCur.next=head;
sCur=head;
}else{
lCur.next=head;
lCur=head;
}
head=head.next;
}
lCur.next=null;
sCur.next=large.next;
return small.next;
}
}
复杂度
时间复杂度O(n)
空间复杂度O(1)