1 // le pointeur de la fonction Créer un moyen passe de ne pas créer des listes? 2 3. #Include <stdio.h> 4. #Include <stdlib.h> 5. Struct la personne 6. { 7. Int NUM; . 8 struct la personne * suivant; . 9 }; 10 . 11 int main () 12 est { 13 est struct la personne * P = NULL ; 14 int n-, m; 15 Scanf ( " % D% D " , et n-, et m); 16 vide Créer ( struct la personne *,int ); // avec struct personne * créer (int); can . 17 int Yue ( struct la personne *, int , int ); 18 est Create (P, n); // pour créer p = (n); can 19 printf ( " % d \ le n " , Yue (P-, le n, m)); 20 retour 0 , 21 } 22 23 vide le create ( struct la personne du * P-, int le n) // question: Pourquoi cette façon ne peut pas être créé avec succès la nouvelle liste? 24 { 25 structPersonne * p1, * p2; // 改为: Personne struct * tête, * p1, * p2; 26 p1 = ( struct personne *) malloc ( sizeof (personne)); 27 int i = 0 ; 28 tandis que (i < n) 29 { 30 i ++ ; 31 P1-> num = i; 32 si (i == 1 ) p = p2 = p1; // 改为: if (i == 1) tête = p2 = p1; 33 d'autre 34 { 35 P2-> next = p1; 36 p2 = p1; 37 } 38 p1 = ( struct personne *) malloc ( sizeof (personne)); 39 } 40 P2-> suivant = NULL; 41 libre (p1); 42 p1 = NULL; 43 // 加一行: tête de retour; 44 } 45 46 int Yue ( struct personne * p, int n, int m) 47 { 48 int i = 0 , j = 1 , k = 0; 49 struct Personne * q * r; 50 q = r = p; 51 tandis que (k <n - 1 ) 52 { 53 i ++ ; 54 j ++ ; 55 56 si (i =! 1 ) r = r-> suivant; 57 si (r == NULL) r = p; 58 59 q = q-> suivant; 60 si (q == NULL) q = p; 61 62 si (j == m) 63 { 64 j =1 ; 65 k ++ ; 66 si (q == p) 67 { 68 p = p-> suivante; 69 q-> next = NULL; 70 libre (q); 71 q = p; 72 } 73 autre si (q-> suivant == NULL) 74 { 75 r-> next = NULL; 76 libre (q); 77 q = p; 78 } 79 autre 80 { 81 r-> next = q-> suivant; 82 libre (q); 83 q = r-> suivant; 84 } 85 } 86 } 87 retour q-> num; 88 }