Sunday, 13 December 2015

Reverse elements of a Doubly LinkedList in C

#include<stdio.h>
#include<stdlib.h>

struct node {
    int data;
    struct node *next;
    struct node *prev;
};

struct node *insert(struct node * head,int data){
        printf("Entered insert\n");
        struct node *newNode = (struct node *)malloc(sizeof(struct node));
        struct node *temp = NULL;
        temp = head;
        newNode->data = data;
        newNode->prev = NULL;
        newNode->next = NULL;
        printf("Node Allocated\n");
        if(head==NULL){
            printf("Entered if loop\n\n");
            head = newNode;
            printf("inside head insertion");
            return head;
        }
        printf("above while loop \n");
        while(temp->next!=NULL){
            temp=temp->next;
        }
        newNode->prev=temp;
        temp->next=newNode;
        return head;
}

void print(struct node *head){
    printf("Entered inside print function\n\n");
    struct node *temp = head;
    while(temp != NULL){
        printf("%d\n",temp->data);
        temp=temp->next;
    }
}

struct node *reverse(struct node *head){
  struct node *temp = NULL;
     struct node *current = head;
     while (current !=  NULL)
     {
       temp = current->prev;
       current->prev = current->next;
       current->next = temp;
       current = current->prev;
     }
     if(temp != NULL )
        head = temp->prev;
    return head;
}
int main()
{
    struct node *head=NULL;
    int i=0;
    int num =0;
    printf("Enter 10 numbers to insert into Doubly Linkedlist\n");
    for(i=0;i<10;i++){
        scanf("%d",&num);
        head =insert(head,num);
        printf("inserted the %d number , head -> data = %d",i,head->data);
    }
    printf("Linked List before Reverse\n");
    print(head);
    head=reverse(head);
    printf("Linked List after Reverse\n");
    print(head);
    return 0;
}

No comments:

Post a Comment