Linked List reversal in C not working -


i want operations linked list in c. have wrote functions - insert @ beginning, insert @ tail, delete beginning etc. in code tried implement reversal of linked list. not working expected. print first value.

#include<stdio.h> #include<stdlib.h> struct node {     int data;     struct node *link; }*new_node,*ptr,*head = null,*tmp;  void create_list(int data) {     new_node = (struct node*) malloc(sizeof(struct node));     head = new_node;     new_node->link=null;     new_node->data=data; }  void insert_beginning(int data) {      if(head==null)     {         create_list(data);     }     else     {         new_node = (struct node*) malloc(sizeof(struct node));         new_node->link = head;         new_node->data=data;         head=new_node;     } } void insert_tail(int data) {     if(head==null)     {         create_list(data);     }     else     {         new_node = (struct node*) malloc(sizeof(struct node));         ptr = head;         while(ptr->link!=null)         {             ptr=ptr->link;         }         new_node->link = null;         new_node->data=data;         ptr->link=new_node;     } } void insert_any_position(int data) {     int pos;     printf("\nenter position: ");     scanf("%d",&pos);     if(pos==1)     {         insert_beginning(data);     }     else     {         int i=1;         new_node = (struct node*) malloc(sizeof(struct node));         ptr = head;         while(ptr->link!=null&&i<(pos-1))         {             ptr=ptr->link;             i++;         }         new_node->link = ptr->link;         new_node->data=data;         ptr->link=new_node;     } } void insert_node() {     int choice,data;     printf("\n1.insert @ beginning\n2.insert @ tail\n3.insert @ position\n4.exit\n");     scanf("%d",&choice);     if(choice<4)     {         printf("\nenter data inserted: ");         scanf("%d",&data);         switch(choice)         {         case 1:             insert_beginning(data);             break;         case 2:             insert_tail(data);             break;         case 3:             insert_any_position(data);             break;         default:             return;         }     }     else         return;  }  void delete_beginning() {     head = head->link; }  void delete_tail() {     ptr=head;     while(ptr->link!=null)     {         tmp=ptr;         ptr=ptr->link;     }     tmp->link=null; } void delete_any_position() {   int pos;     printf("\nenter position: ");     scanf("%d",&pos);     if(pos==1)     {         delete_beginning();     }     else     {         ptr=head;         int i=1;         while(ptr->link!=null && i<(pos-1))         {             ptr=ptr->link;             i++;         }         ptr->link=(ptr->link)->link;     }  } void delete_data() {  }  void delete_node() {     int choice,data;     printf("\n1.delete beginning\n2.delete tail\n3.delete position\n4.delete data\n5.exit\n");     scanf("%d",&choice);     if(choice<5)     {          switch(choice)         {         case 1:             delete_beginning();             break;         case 2:             delete_tail();             break;         case 3:             delete_any_position();             break;         case 4:             printf("\nenter data deleted: ");             scanf("%d",&data);             delete_data(data);             break;         default:             return;         }     }     else         return; } void display_list() {     ptr = head;     while(ptr!=null)     {         printf("%d ",ptr->data);         ptr = ptr->link;     } }  void display_list_recursion(struct node* ptr) {     if(ptr==null)         return;     else     {         printf("%d ",ptr->data);         display_list_recursion(ptr->link);     } } void display_list_recursion_reverse(struct node* ptr) {     if(ptr==null)         return;     else         {         display_list_recursion_reverse(ptr->link);         printf("%d ",ptr->data);     }     } 

this function not working:

void reverse_list_iteration() {     struct node *current,*prev,*next;     current=head;     prev=null;     while(current->link!=null)     {         next = current->link;         current->link = prev;         prev=current;         current=next;     }     head=prev; }  main() {     int choice;         {         printf("\nenter choice\n1.insert\n2.delete\n3.display\n4.display using recursion");         printf("\n5.display reverse\n6.reverselistiteration\n7.exit\n\t\t\t");         scanf("%d",&choice);         switch(choice)         {         case 1:             insert_node();             break;         case 2:             delete_node();             break;         case 3:             display_list();             break;         case 4:display_list_recursion(head);             break;         case 5:display_list_recursion_reverse(head);             break;         case 6:reverse_list_iteration();             break;         case 7:             exit(0);         }     }     while(choice<7); } 

other functions working. after calling reverse_list_iteration() calling display_list() displays 1 data. think links broken, can't figure out.

just change current->link!=null current!=null in reverse_list_iteration() , problem solved.

hope helps you. happy coding.


Comments

Popular posts from this blog

node.js - Using Node without global install -

How to access a php class file from PHPFox framework into javascript code written in simple HTML file? -

java - Null response to php query in android, even though php works properly -