描述
现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。
思路:
给定四个结点l1、l2、l3、l4,均为傀儡结点,l1、l2为val小于x的结点服务,l3、l4为大于等于x的结点服务,定义cur遍历pHead链表,依次与x比较大小,假设比x小,令l2.next=cur,l2.next.next=null,然后继续遍历,直到cur为null;
代码:
public class Partition {
public ListNode partition(ListNode pHead, int x) {
if(pHead==null||pHead.next==null){
return pHead;
}
ListNode l1=new ListNode(-1);//小头
ListNode l2=l1;
ListNode l3=new ListNode(-1);//大头
ListNode l4=l3;
ListNode cur=pHead;
while(cur!=null){
if(cur.val<x){
l2.next=cur;
cur=cur.next;
l2.next.next=null;
l2=l2.next;
}else{
l4.next=cur;
cur=cur.next;
l4.next.next=null;
l4=l4.next;
}
}
l2.next=l3.next;
return l1.next;
}
}