El trabajo diario titula el vigésimo primer título 20200323

/ **
* 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();
	}
}

  

* 运行结果

 

 

Supongo que te gusta

Origin www.cnblogs.com/walxt/p/12551712.html
Recomendado
Clasificación