Sword se refiere a offer22: el nodo K de la parte inferior de la lista vinculada

1. Descripción del título

Ingrese una lista vinculada y genere el k-ésimo nodo desde la parte inferior de la lista vinculada. Para ajustarse a los hábitos de la mayoría de las personas, esta pregunta comienza a contar desde 1, es decir, el nodo final de la lista vinculada es el primer nodo desde abajo.

Por ejemplo, una lista vinculada tiene 6 nodos. A partir del nodo principal, sus valores son 1, 2, 3, 4, 5 y 6. El tercer nodo de la parte inferior de esta lista vinculada es el nodo con el valor 4.

Dos ideas para resolver problemas

Idea 1:

1. Cuente la longitud de la lista vinculada y regístrela como n
2. Establezca un puntero para que vaya (nk) paso primero, luego puede encontrar el nodo Kth

Idea dos (puntero doble):

1. Ajuste el puntero doble lento y rápido de modo que ambos estén en la cabeza.
2. Primero suelte k pasos rápidos.
3. Deje que lento y rápido retrocedan paso a paso al mismo tiempo hasta que el rápido esté vacío.
4. El posición de lento es la penúltima posición. K nodos

Tres, implementación de código

Darse cuenta de uno:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    
    
    public ListNode getKthFromEnd(ListNode head, int k) {
    
    
        if(head==null)   return null;
        ListNode cur=head;
        int size=0;
        while(cur!=null){
    
    
            size++;
            cur=cur.next;
        }
        cur=head;
        while(size-k>0){
    
    
            cur=cur.next;
            size--;
        }
        return cur;


    }
}

Implementación dos:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    
    
    public ListNode getKthFromEnd(ListNode head, int k) {
    
    
        if(head==null)   return null;
        ListNode slow=head;
        ListNode fast=head;
        for(int i=0;i<k;i++){
    
    
            fast=fast.next;
        }
        while(fast!=null){
    
    
            slow=slow.next;
            fast=fast.next;
        }
        return slow;
    }
}

Cuatro, resultados en ejecución

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_42681119/article/details/115328288
Recomendado
Clasificación