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;
}
}