2017-06-15 3 views
0
#include <stdio.h> 

#include<stdlib.h> 

typedef struct node 
{ 
    int data; 
    int help; 
    struct node* next; 
    }Node; 

void print_list(Node* head); 
void CreateList(Node** head ,int data); 
void reverse(Node** head_ref); 



int main() 
{ 
    int i,c,a; 
    Node* list = NULL; 
    printf("How many numbers do you want? "); 
    scanf("%d",&c); 
    for(i=1;i<=c;i++) 
    { 
     printf("Enter number %d: ",i); 
     scanf("%d",&a); 
     CreateList(&list,a); 
    } 

    printf("Given linked list\n"); 
    print_list(list); 
    reverse(&list); 
    printf("\nReversed Linked list \n"); 
    print_list(list); 
    return 0; 
} 

void print_list(Node* head) 
{ 
    while(head != NULL) 
    { 
     printf("%d -> ",head->data); 
     head = head->next; 
    } 
    if(head==NULL) 
     printf("NULL"); 
    return; 
} 

void CreateList(Node** head ,int data) 
{ 
    Node *temp = (Node*) malloc(sizeof(Node));; 
    temp->data = data; 
    temp->next = *head; 
    *head = temp; 
} 

void reverse(Node** head_ref) 
{ 
    Node* prev = NULL; 
    Node* current = *head_ref; 
    Node* next; 
    while (current != NULL) 
    { 
     next = current->next; 
     current->next = prev; 
     prev = current; 
     current = next; 
    } 
    *head_ref = prev; 
} 

Entrée: 1 2 3 4 5 6C - liste liée - lié de la manière inverse

  • Compte tenu de la liste chaînée: 6-> 5-> 4-> 3-> 2-> 1-> NULL

  • liste Reversed liés: 1-> 2-> 3-> 4-> 5> 6> NULL

Mon idée était la suivante:

  • 1-> 2-> 3-> 4-> 5-> 6-> NULL - Pour la liste donnée

  • 6-> 5-> 4-> 3-> 2> 1 -> NULL - pour être la liste inversée

J'ai essayé si dur et pourtant n'a pas pu trouver un moyen de créer une liste d'une manière normale, toutes les solutions possibles?

Répondre

1

Votre fonction create_list() insère le nouveau nœud au début de la chaîne, en abaissant les elsements existants. Au lieu de cela, vous pouvez ajouter à la fin de la chaîne, comme:


void add_at_end(Node** head ,int data) 
{ 
    Node *temp; 

     // Find the end of the chain 
    while (*head) { head = & (*head)->next ; } 

    temp = malloc(sizeof *temp); 
    temp->next = NULL; 
    temp->data = data; 
     // append 
    *head = temp; 
} 
+0

Merci, cela a fonctionné;) – Ameer

+1

accepte cette réponse si cela a fonctionné. ne les remercie pas –