題目描述:
編寫代碼,以給定值x爲基準將鏈表分割成兩部分,所有小於x的結點排在大於或等於x的結點之前
給定一個鏈表的頭指針 ListNode* pHead,請返回重新排列後的鏈表的頭指針。
注意:分割後保持原來的數據順序不變
解題思路:
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) {
// write code here
ListNode beforeStart = null;
ListNode afterStart = null;
ListNode beforeEnd = null;
ListNode afterEnd = null;
while (pHead != null){
ListNode pHeadNext = pHead.next;
pHead.next = null;
if (pHead.val < x){
if (beforeStart == null){
beforeStart = pHead;
beforeEnd = beforeStart;
}else {
beforeEnd.next = pHead;
beforeEnd = beforeEnd.next;
}
}else {
if (afterStart == null){
afterStart = pHead;
afterEnd = afterStart;
}else {
afterEnd.next = pHead;
afterEnd = afterEnd.next;
}
}
pHead = pHeadNext;
}
if (beforeStart == null){
return afterStart;
}
beforeEnd.next = afterStart;//單鏈表拼接
return beforeStart;
}
}