GeekInterview.com
   Home |  Tech FAQ  |   Interview Questions |  Placement Papers |  Tech Articles |  Learn |  Freelance Projects |  Online Testing |  Geeks Talk |  Job Postings |  Knowledge Base | Site Search |  Add/Ask Question

  GeekInterview.com  >  Placement Papers  >  Aztec Systems  >  C

 Print  |  
Question:  Write a program to reverse a linked list



July 07, 2009 06:34:21 #3
 pranjal5215   Member Since: July 2008    Total Comments: 2 

RE: Write a program to reverse a linked list
 
This is the recursive version of the program.


#include<stdio.h>
#include<stdlib.h>
struct list
{
        int month;
        struct list *next;
};
typedef struct list node;
void init(node* record)
{
        record->next=NULL;
}
void addnode(node* record,int d)
{
        node* fresh;
        fresh=(node *)malloc(sizeof(node));
        fresh->month=d;
        fresh->next=record->next;
        record->next=fresh;
}
void print(node *record)
{
        node* temp;
        temp=(node *)malloc(sizeof(node));
        for(temp=record->next;temp;temp=temp->next)
                printf(" %d",temp->month);
}

node* reverse_recurse(node* cur,node* start)/*reverse linked list recursively*/
{
        if(cur->next==NULL)
        {
                start->next=cur;
                return cur;
        }
        else
        {
                reverse_recurse(cur->next,start)->next=cur;
        }
        return cur;
}
int main(void)
{
        node* start;
        start=(node *)malloc(sizeof(node));
        init(start);
        int i=0;
        for(i=20;i>=0;i--)
                addnode(start,i);
        print(start);
        reverse_recurse(start->next,start)->next=NULL;
        print(start);
        printf("n");
        return 0;
}
     

 

Back To Question