Leetcode 19. Suppression de l'avant-dernier Nième nœud de la liste chaînée Implémentation à 100% en langage C

【Titre】

Étant donné une liste chaînée, supprimez l'avant-dernier nième nœud de la liste chaînée et renvoyez le nœud principal de la liste chaînée.

Exemples:

Étant donné une liste chaînée: 1-> 2-> 3-> 4-> 5, et n = 2.

Lorsque l'avant-dernier nœud est supprimé, la liste liée devient 1-> 2-> 3-> 5.
Explication:

La garantie n donnée est valable.

Avancé:

Pouvez-vous essayer d'utiliser une analyse en une seule passe?

【Pensée】

Définissez deux pointeurs, un pointeur parcourt normalement et un pointeur parcourt plus tard. En reculant, effectuez une opération de soustraction sur n, une fois que n est égal à 0, il commence à se déplacer et le pointeur retardé commence à se déplacer

1  / * *
 2  * Définition d'une liste à liaison unique.
3  * struct ListNode {
 4  * int val;
5  * struct ListNode * suivant;
6  *};
7   * / 
8  
9  
10  struct ListNode * removeNthFromEnd ( struct ListNode * head, int n) {
 11      struct ListNode * ptr = head; 
12      struct ListNode * delayN = tête;
13      while (ptr-> next! = NULL) { 
 14          if (n> 0 )
 15             n-- ;
16          else 
17              delayN = delayN-> suivant;
18          ptr = ptr-> suivant;
19      }
 20      if (n == 0 )
 21          delayN-> next = delayN-> next-> next;
22      else 
23          head = head-> next;
24      tête de retour ;
25 }

[Analyse BUG]

Au début, il n'y avait pas de ligne 22, ligne 23, il y avait une erreur pour [1] 1. A ce moment, n n'effectue pas l'opération de soustraction, qui n'est pas 0, il s'agit donc de supprimer le nœud principal! ! !

【Résultat】

0 ms 100%

5,4 Mo 100%

Mais il n'y a pas de gratuit c'est un problème QWQ

Si vous êtes plus rigoureux ... ce n'est pas un double cent 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          else 
8              delayN = delayN-> suivant;
9          ptr = ptr-> suivant;
10      }
 11      si (n == 0 ) {
 12         struct ListNode * s = delayN-> suivant;
13          delayN-> next = delayN-> next-> next;
14          gratuit (s);
15      }
 16      else {
 17          struct ListNode * s = head;
18          tête = tête-> suivante;
19          gratuit (s);
20      }
 21      tête de retour ;
22 }

【Résultat】

4 ms 73,58%

5,6 Mo 100%

Je suppose que tu aimes

Origine www.cnblogs.com/jhjgarden/p/12702666.html
conseillé
Classement