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.
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é.
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
#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; }
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!