描述:
现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Partition {
public ListNode partition(ListNode pHead, int x) {
// write code here
if(pHead == null || pHead.next == null){
return pHead;
}
//newHead的指针
ListNode newHead = new ListNode(-1);
ListNode tmp = newHead;
//pHead的指针
ListNode preCur = pHead;
ListNode cur = preCur.next;
//把小于x的节点放进newHead链表里
//其余结点不动
while(cur != null){
if(cur.val < x){
preCur.next = cur.next;
tmp.next = cur;
tmp = tmp.next;
cur = preCur.next;
}else{
preCur = preCur.next;
cur = preCur.next;
}
}
//判断头节点并拼接链表newHead -> pHead
if(pHead.val < x){
cur = pHead;
pHead = pHead.next;
cur.next = newHead.next;
tmp.next = pHead;
return cur;
}else{
tmp.next = pHead;
return newHead.next;//删除pHead中的头节点
}
}
}