Leetcode 19. Eliminar el penúltimo nodo Nth de la lista vinculada Implementación 100% en lenguaje C

【Título】

Dada una lista vinculada, elimine el penúltimo nodo enésimo de la lista vinculada y devuelva el nodo principal de la lista vinculada.

Ejemplos:

Dada una lista vinculada: 1-> 2-> 3-> 4-> 5, yn = 2.

Cuando se elimina el penúltimo nodo, la lista vinculada se convierte en 1-> 2-> 3-> 5.
Explicación:

La garantía n dada es válida.

Avanzado:

¿Puedes intentar usar un escaneo de una pasada?

【Pensamiento】

Establezca dos punteros, un puntero atraviesa normalmente y un puntero atraviesa más tarde. Al atravesar hacia atrás, realice una operación de resta en n, una vez que n es 0, comienza a moverse y el puntero retrasado comienza a moverse

1  / * *
 2  * Definición de lista individualmente vinculada.
3  * struct ListNode {
 4  * int val;
5  * struct ListNode * next;
6  *};
7   * / 
8  
9  
10  struct ListNode * removeNthFromEnd ( struct ListNode * head, int n) {
 11      struct ListNode * ptr = head; 
12      struct ListNode * delayN = head;
13      while (ptr-> next! = NULL) { 
 14          if (n> 0 )
 15             n-- ;
16          más 
17              delayN = delayN-> next;
18          ptr = ptr-> siguiente;
19      }
 20      if (n == 0 )
 21          delayN-> next = delayN-> next-> next;
22      más 
23          cabeza = cabeza-> siguiente;
24      cabezales de retorno ;
25 }

[Análisis de error]

Al principio no había línea22 línea23, había un error para [1] 1. En este momento, n no realiza la operación de sustracción, que no es 0, por lo que es para eliminar el nodo principal. ! !

【Resultado】

0ms 100%

5.4MB 100%

Pero no hay gratis esto es un problema QWQ

Si eres más riguroso ... no es un doble cien QAQ

1  struct ListNode * removeNthFromEnd ( struct ListNode * head, int n) {
 2      struct ListNode * ptr = head; 
3      struct ListNode * delayN = head;
4      while (ptr-> next! = NULL) { 
 5          if (n> 0 )
 6              n-- ;
7          más 
8              delayN = delayN-> siguiente;
9          ptr = ptr-> siguiente;
10      }
 11      if (n == 0 ) {
 12         struct ListNode * s = delayN-> next;
13          delayN-> next = delayN-> next-> next;
14          gratis (s);
15      }
 16      else {
 17          struct ListNode * s = head;
18          cabeza = cabeza-> siguiente;
19          gratis (s);
20      }
 21      cabeza de retorno ;
22 }

【Resultado】

4ms 73.58%

5.6MB 100%

Supongo que te gusta

Origin www.cnblogs.com/jhjgarden/p/12702666.html
Recomendado
Clasificación