题意理解:
对应给定链表list,和数值val,将先前链表内容重排序,结果使得,小于val的值在左边,大于等于val的值在右边;
题目分析:
使用两组指针,分别标示小于val的链表,和大于等于val的链表,然后将两个链表合并;
解题代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode partition(ListNode head, int x) {
if(head==null){
return null;
}
ListNode lBegin=null;
ListNode lEnd=null;
ListNode rBegin=null;
ListNode rEnd=null;
ListNode p=head;
while(p!=null){
// System.out.println("p.val= "+p.val);
if(p.val<x){
if(lBegin==null){
lBegin=p;
lEnd=lBegin;
// System.out.println("lBegin.val= "+lBegin.val);
// System.out.println("lEnd.val= "+lEnd.val);
//continue;
}else{
lEnd.next=p;
lEnd=p;
// System.out.println("lBegin.val= "+lBegin.val);
// System.out.println("lEnd.val= "+lEnd.val);
}
}else{
if(rBegin==null){
rBegin=p;
rEnd=rBegin;
// System.out.println("rBegin.val= "+rBegin.val);
// System.out.println("rEnd.val= "+rEnd.val);
//continue;
}else{
rEnd.next=p;
rEnd=p;
// System.out.println("rBegin.val= "+rBegin.val);
// System.out.println("rEnd.val= "+rEnd.val);
}
}
p=p.next;
}
if(rEnd!=null){
rEnd.next=null;
}
if(lEnd!=null){
lEnd.next=rBegin;
}
// p=lBegin;
// while(p!=null){
// System.out.println("ans= "+p.val);
// }
if(lBegin!=null){
return lBegin;
}else{
return rBegin;
}
}
}