Maison  >  Article  >  développement back-end  >  Utilisez la méthode d'itération en langage C pour imprimer les k derniers nœuds de la liste chaînée dans l'ordre inverse.

Utilisez la méthode d'itération en langage C pour imprimer les k derniers nœuds de la liste chaînée dans l'ordre inverse.

WBOY
WBOYavant
2023-09-17 21:21:02892parcourir

Utilisez la méthode ditération en langage C pour imprimer les k derniers nœuds de la liste chaînée dans lordre inverse.

Nous devons imprimer les k nœuds de la liste chaînée dans l'ordre inverse. Nous devons appliquer une approche itérative pour résoudre ce problème.

Les méthodes itératives sont généralement exécutées à l'aide d'une boucle jusqu'à ce que la valeur de la condition soit 1 ou vraie.

Disons que la liste contient les nœuds 29, 34, 43, 56 et 88 et que la valeur de k est 2, la sortie sera les nœuds de rechange jusqu'à k, par exemple 56 et 88.

Utilisez la méthode d'itération en langage C pour imprimer les k derniers nœuds de la liste chaînée dans l'ordre inverse.

Exemple

Linked List: 29->34->43->56->88
Input: 2
Output: 56 88

Puisque nous devons supprimer les k derniers éléments de la liste, le meilleur moyen est d'utiliser une structure de données de pile dans laquelle les éléments y sont poussés, cela créera la liste et l'élément de départ de la pile est le dernier élément de la liste, puis ils sont retirés de la pile jusqu'à la kième fois, nous donnant le dernier nœud de la liste chaînée.

Le code ci-dessous montre l'implémentation C de l'algorithme donné.

Algorithme

START
   Step 1 -> create node variable of type structure
      Declare int data
      Declare pointer of type node using *next
   Step 2 -> create struct node* intoList(int data)
      Create newnode using malloc
      Set newnode->data = data
      newnode->next = NULL
      return newnode
   step 3 -> Declare function void rev(struct node* head,int count, int k)
      create struct node* temp1 = head
      Loop While(temp1 != NULL)
         count++
         temp1 = temp1->next
      end
      Declare int array[count], temp2 = count,i
      Set temp1 = head
      Loop While(temp1 != NULL)
         Set array[--temp2] = temp1->data
         Set temp1 = temp1->next
      End
      Loop For i = 0 and i < k and i++
         Print array[i]
      End
   Step 4 -> In Main()
      Create list using struct node* head = intoList(9)
      Set k=3 and count=0
      Call rev(head,count,k)
STOP

Exemple

#include<stdio.h>
#include<stdlib.h>
// Structure of a node
struct node {
   int data;
   struct node *next;
};
//functon for inserting a new node
struct node* intoList(int data) {
   struct node* newnode = (struct node*)malloc(sizeof(struct node));
   newnode->data = data;
   newnode->next = NULL;
   return newnode;
}
// Function to reversely printing the elements of a node
void rev(struct node* head,int count, int k) {
   struct node* temp1 = head;
   while(temp1 != NULL) {
      count++;
      temp1 = temp1->next;
   }
   int array[count], temp2 = count,i;
   temp1 = head;
   while(temp1 != NULL) {
      array[--temp2] = temp1->data;
      temp1 = temp1->next;
   }
   for(i = 0; i < k; i++)
   printf("%d ",array[i]);
}
int main() {
   printf("</p><p>reverse of a list is : ");
   struct node* head = intoList(9); //inserting elements into a list
   head->next = intoList(76);
   head->next->next = intoList(13);
   head->next->next->next = intoList(24);
   head->next->next->next->next = intoList(55);
   head->next->next->next->next->next = intoList(109);
   int k = 3, count = 0;
   rev(head, count, k); //calling function to print reversely
   return 0;
}

Output

Si nous exécutons le programme ci-dessus, il générera la sortie suivante.

reverse of a list is : 109 55 24

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer