编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。
代码如下:
package niuke;
/*
* 0713
*/
public class Partion {
public ListNode partition(ListNode pHead, int x) {
// write code here
if(pHead==null)return null;
ListNode less=null,big=null;
ListNode lessStart=null;
ListNode bigStart=null;
while(pHead!=null){
ListNode next=pHead.next;
pHead.next=null;
if(pHead.val<x){
if(less!=null){
less.next=pHead;
less=pHead;
}
else{
lessStart=pHead;
less=lessStart;
}
}else{
if(big!=null){
big.next=pHead;
big=pHead;
}
else{
bigStart=pHead;
big=bigStart;
}
}
pHead=next;
}
if(lessStart==null)
return bigStart;
less.next=bigStart;
return lessStart;
}
public void showNode(ListNode pHead){
if(pHead==null) return;
int count=0;
while(pHead!=null){
System.out.println("第"+count+"次:"+pHead.val);
pHead=pHead.next;
count++;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ListNode head=new ListNode(1);
ListNode head1=new ListNode(5);
ListNode head2=new ListNode(4);
ListNode head3=new ListNode(2);
ListNode head4=new ListNode(6);
ListNode head5=new ListNode(7);
head.next=head1;
head1.next=head2;
head2.next=head3;
head3.next=head4;
head4.next=head5;
head5.next=null;
Partion pt=new Partion();
System.out.println("调用函数前:");
pt.showNode(head);
pt.partition(head, 5);
System.out.println("调用函数后:");
pt.showNode(head);
}
}
结果如下:
调用函数前:
第0次:1
第1次:5
第2次:4
第3次:2
第4次:6
第5次:7
调用函数后:
第0次:1
第1次:4
第2次:2
第3次:5
第4次:6
第5次:7