题意:
错误思路:
一直想在一条链表上 通过旋转递归啥的解决,这样不适合或者很麻烦
正确解答是:构造两个新的结点 一个结点保存小于x的值 一个结点保存大于等于x的值
然后相连接
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode partition(ListNode head, int x) {
//思路:不适合在一根链表上操作,适合用两个新的结点 构造两条新的链表
ListNode nodeMin=new ListNode(-1);
ListNode nodeMax=new ListNode(-1);
ListNode minStart=nodeMin;
ListNode maxStart=nodeMax;
while(head!=null){
if(head.val >= x){
nodeMax.next=head;
nodeMax=nodeMax.next;
}else{
nodeMin.next=head;
nodeMin=nodeMin.next;
}
head=head.next;
}
nodeMax.next=null;
nodeMin.next=maxStart.next;
return minStart.next;
}
}