public class test11 { public static class Node{ public int value; public Node next; public Node(int data){ this.value = data; } } public static Node listPartition1(Node head , int pivot){ if(head == null){ return null; } Node cur = head; int length = 0; while (cur != null){ length++; cur = cur.next; } Node[] NodeArr = new Node[length]; length = 0; cur = head; for (length = 0; length != NodeArr.length; length++) { NodeArr[length] = cur; cur = cur.next; } partitionArray(NodeArr , pivot); for (length = 1; length != NodeArr.length; length++) { NodeArr[length-1].next = NodeArr[length]; } NodeArr[length-1].next=null; return NodeArr[0]; } public static void partitionArray(Node[] NodeArr, int pivot) { int left = 0; int right = NodeArr.length - 1; int index = 0; while (index <= right) { if (NodeArr[index].value < pivot) { swap(NodeArr, left++, index++); } else if (NodeArr[index].value > pivot) { swap(NodeArr, right--, index); } else { index++; } } } private static void swap(Node[] NodeArr, int i, int j) { Node temp = NodeArr[i]; NodeArr[i] = NodeArr[j]; NodeArr[j] = temp; } }
public class test11 { public static class Node{ public int value; public Node next; public Node(int data){ this.value = data; } } public static Node listPartition2(Node head , int pivot){ //小于区域 Node sH = null; Node sT = null; //等于区域 Node eH = null; Node eT = null; //大于区域 Node mH = null; Node mT = null; Node next = null; while (head != null){ next = head.next; head.next = null; if(head.value < pivot){ if(sH == null){ sH = head; sT = head; }else{ sT.next = head; sT = head; } }else if(head.value == pivot){ if(eH ==null){ eH = head; eT = head; }else{ eT.next = head; eT = head; } }else{ if(mH == null){ mH = head; mT = head; }else{ mT.next = head; mT = head; } } head = next; } if(sT != null){ sT.next = eH; eT = eT == null ? sT : eT; } if(eT != null){ eT.next = mH; } return sH != null ? sH : (eH != null ? eH : mH); } }