描述
现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。
public class Partition {
public ListNode partition(ListNode pHead, int x) {
// write code here
if(pHead == null){
return pHead;
}
ListNode smallNode = new ListNode(-1);
ListNode bigNode = new ListNode(-1);
ListNode smallFirst, bigFirst;
smallFirst = smallNode;
bigFirst = bigNode;
//注意此处条件是pHead,如果是pHead.next会少判断一次,拉下了最后一个数
while(pHead != null){
if(pHead.val < x){
smallNode.next = pHead;
smallNode = pHead;;
}else{
bigNode.next = pHead;
bigNode = pHead;
}
pHead = pHead.next;
}
smallNode.next = bigFirst.next;
bigNode.next = null;
return smallFirst.next;
}
}