import java.util.*; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Partition { public ListNode partition(ListNode pHead, int x) { //比x小,bs and he为前链表的头和尾 ListNode bs=null; ListNode be=null; //比x大, as and ae... ListNode as=null; ListNode ae=null; //定义新的头,防止phead指针移动,影响其他使用操作 ListNode head=pHead; //遍历链表 while(head!=null){ //比x小,存前链表中 if(head.val<x){ if(bs==null){ bs=be=head; head=head.next; }else{ be.next=head; be=be.next; head=head.next; } }else{ //比X大 if(as==null){ as=ae=head; head=head.next; }else{ ae.next=head; ae=ae.next; head=head.next; } } } //bs=null,前链表为空 if(bs==null){ return as; } //as=null,后链表为空,走到这里,前链表不可能为空 if(as==null){ be.next=as;//最后节点next置空 return bs; } //走到这里,前后链表都不为空,连接两个链表尾头,这里后链表的尾可能不为空,进行判断!!! if(ae.next!=null){ ae.next=null; } be.next=as; return bs; } }