/ **
* Título: la lista de comprobación por un cierto valor de la izquierda dividido en pequeño, igual a la intermedia, una forma grande derecha
*
* requisitos:
* primer nodo a una lista predeterminada de cabeza forma enlazada de nodos es un tipo de valor entero, entonces dado una Privot entero. Implementar
función * para ajustar una lista enlazada, la lista enlazada se ajustan a la parte izquierda es menor que el valor de la Privot nodo, la parte intermedia es igual Privot
* nodo, es mayor que la parte derecha de la Privot nodo. Además de este requisito, no hay más necesidad de la orden de nodo ajustado.
* Por ejemplo: lista 9-> 0-> 4-> 5-> 1, Privot = 3. Lista puede ajustarse 1-> 0-> 4-> 9-> 5, puede ser
* 0-> 1-> 9-> 5-> 4. En resumen, para cumplir con algunos de los nodos se dejan miles de pequeños 3, la parte media es igual al nodo 3, las piezas adecuadas son
* nodo puede ser mayor que 3. En una parte de la orden de nodo interno no es necesario.
*
* Análisis:
* complejidad de tiempo Solution es O (N), la complejidad espacio adicional es O (N), es decir, todos los nodos en la lista vinculada en un frontal
array * exterior, y luego mide la posición del ajuste uniforme. proceso específico es como sigue:
* 1 de nuevo para recorrer la lista con el fin de obtener una longitud, suponiendo que la longitud de la lista es N.
* 2. Generar Nodo longitud N tipo de matriz nodeArr, a continuación, recorrer una lista enlazada de nodos sucesivamente en nodeArrray.
* 3. nodeArray en el nodo de la izquierda de Privot menor que, igual que poner el medio, mayor que la de la derecha.
* 4. Después del ajuste de la etapa 3, el orden nodo nodeAn- para cumplir los requisitos del sujeto, siempre que los nodos por nodeArray
* Los tiempos de reconexión de hasta los extremos de proceso enteros.
*
* @Author nieve pupila
*
* /
Nodo clase pública {
int valor público;
Nodo público el próximo;
Nodo pública (datos int) {
this.value = datos;
}
}
{Clase ListPart pública
privada el actual nodo; // nodo actual
int privado nodeLength = 0; // longitud de la cadena
privada Nodo nodeArray [] = null; // lista de arreglo
int privado i = 0; // variable de bucle
int privado CurrentValue = 0; // valor actual del nodo
pública listPart el nodo (la cabeza nodo, Privot int) {
SI (cabeza == null) {
cabeza retorno;
}
// Obtener la lista longitud
actual = cabeza;
al mismo tiempo que {(actual! = null)
nodeLength ++;
actual = actual .Next;
}
// escribir el contenido de la matriz lista
nodeArray el nodo nuevo nuevo = [nodeLength];
Current = cabeza;
el tiempo (I <nodeLength) {
nodeArray [I] = corriente;
I ++;
actual = current.next;
}
//排序
//数值交换函数
int pequeños = -1;
int grande = nodeArray.length;
int index = 0;
mientras que (índice = grande!) {
CurrentValue = nodeArray [índice] .value;
si (CurrentValue <Privot) {
swapElements (nodeArray, ++ pequeña, índice ++);
} else if (CurrentValue> Privot) {
swapElements (nodeArray, --big, índice);
} else {
índice ++;
}
}
//重新连接链表
para (i = 1; i = nodeLength;! I ++) {
nodeArray [i-1] .Next = nodeArray [i];
}
NodeArray [nodeLength-1] .Next = null;
cabeza = nodeArray [0];
cabeza retorno;
}
SwapElements public void (Nodo nodeArray [], int a, int b) {
Nodo tranElements = null;
tranElements nodeArray = [b];
nodeArray [b] = nodeArray [a];
nodeArray [a] = tranElements;
}
}
import java.util.Random;
import java.util.Scanner;
public class TestListPart {
public static void main(String[] args) {
ListPart list = new ListPart();
TestListPart test = new TestListPart();
//获取初始信息
Random rand = new Random();
Scanner sc = new Scanner(System.in);
System.out.println("请输入链表长度");
int K = sc.nextInt();
System.out.println("请输入位置元素值");
int privot = sc.nextInt();
//随机生成链表
Node nodes[]=new Node[K];
for(int i=0;i<nodes.length;i++) {
nodes[i]=new Node(rand.nextInt(20)+1);
}
for(int i =0;i<nodes.length-1;i++) {
nodes[i].next=nodes[i+1];
}
Node head = nodes[0];
//test
test.showNode(head);
Node partNode = list.listPart(head, privot);
test.showNode(partNode);
}
public void showNode(Node head) {
System.out.println("链表内的元素如下所示...");
while(head != null) {
System.out.print(head.value+"\t");
head = head.next;
}
System.out.println();
}
}
* 运行结果