Descripción del Título:
Ingrese una lista vinculada y genere el k-ésimo nodo de 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.
Caso de prueba:
给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.
Ideas de resolución de problemas:
- Puntero doble, inicializa dos punteros, forma y cola apuntan a la cabeza.
- La forma del puntero frontal avanza k pasos primero.
- Luego, los dos punteros se mueven hacia atrás al mismo tiempo, hasta que el formulario pasa el nodo final (es decir, nulo)
- Volver a la cola
Manifestación:
1. Tanto la forma como la cola apuntan a 1.
2. La forma se mueve primero 2 pasos, y la forma apunta a 3. 3. La
forma y la cola se mueven hacia atrás al mismo tiempo hasta que la forma apunta a nulo, y luego la cola es regresó.
Código de CA (c ++)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* getKthFromEnd(ListNode* head, int k) {
ListNode * form = head;
ListNode * tail = head;
while(k--)
{
tail = tail->next;
}
while(tail){
tail = tail->next;
form = form->next;
}
return form;
}
};