【演算法】以給定值x為基準將連結串列分割成兩部分,所有小於x的結點排在大於或等於x的節點之前
阿新 • • 發佈:2018-11-07
/* * 直接建立兩個連結串列:一個連結串列存放小於x的元素,另一個存放大於或等於x的元素。 * 然後迭代訪問整個連結串列,將元素插入before或者after連結串列前端!!!一旦抵達連結串列末端,則表明拆分完畢,最後合併兩個連結串列。 */ public static LinkedListNode partition2(LinkedListNode node, int x){ if( node== null) return null; LinkedListNode beforeStart= null; LinkedListNode afterStart= null; while( node!= null){ LinkedListNode next= node. next; node. next= null; if( node. data< x){ node. next= beforeStart; beforeStart= node; } else{ node. next= afterStart. next; afterStart= node; } } if( beforeStart== null) return afterStart; LinkedListNode head= beforeStart; while( beforeStart. next!= null){ beforeStart= beforeStart. next; } beforeStart. next= afterStart; return head; }