Implementación de Niuke Top101 JS para obtener los últimos k nodos en la lista vinculada

describir

Ingrese una lista vinculada con una longitud de n, establezca el valor del elemento en la lista vinculada en ai y devuelva el último k-ésimo nodo en la lista vinculada.

Si la longitud de la lista enlazada es menor que k, devuelve una lista enlazada de longitud 0.

  

Rango de datos: 0 ≤ n ≤ 10^50≤n≤105, 0 ≤ ai ≤ 10^9, 0 ≤ k ≤ 10^9

Requisitos: complejidad espacial O(n), complejidad temporal O(n)

Avanzado: complejidad espacial O(1), complejidad temporal O(n)

Por ejemplo, cuando se ingresa {1,2,3,4,5},2, la estructura de la lista vinculada correspondiente se muestra en la siguiente figura:

 

Entre ellos, la parte azul son los dos últimos nodos de la lista enlazada, así que simplemente devuelva el penúltimo nodo (es decir, el nodo con un valor de nodo de 4) y el sistema imprimirá todos los nodos posteriores para compararlos.

Ejemplo 1

ingresar:

{1,2,3,4,5},2

valor de retorno:

{4,5}

ilustrar:

Devuelva el penúltimo nodo 4 y el sistema imprimirá todos los nodos posteriores para compararlos.

Ejemplo 2

ingresar:

{2},8

valor de retorno:

{}

Idea: En primer lugar, debe juzgar si k es mayor que la longitud de la lista vinculada, por lo que primero debe atravesar para obtener la longitud de la lista vinculada y luego juzgar directamente. lista enlazada, devuelva nulo, y luego debe juzgar si k es igual a 0, porque no hay penúltimo elemento 0, por lo que si k es igual a 0, devolverá nulo, y en otro caso, devolverá nulo si la lista enlazada está vacía. La lógica de seguimiento es muy simple, que es juzgar si la lista enlazada ha alcanzado el número y regresar directamente cuando alcanza el número. El código completo es el siguiente:

/*
 * function ListNode(x){
 *   this.val = x;
 *   this.next = null;
 * }
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param pHead ListNode类 
 * @param k int整型 
 * @return ListNode类
 */
function FindKthToTail( pHead ,  k ) {
    // write code here
    let n=0;
    let n1=0;
    let p1=pHead;
    while(p1) {
        n++;
        p1=p1.next;
    }
    if(k>n||k===0||pHead===null) {
        return null;
    }
    else {
        while(pHead) {
            n1++;
            if(n1===n-k+1) {
                return pHead;
            }
            else {
                pHead=pHead.next;
            }
            
        }
    }
}
module.exports = {
    FindKthToTail : FindKthToTail
};

Supongo que te gusta

Origin blog.csdn.net/qq_43781887/article/details/128197475
Recomendado
Clasificación