In C language dont use stdlibh or stringh ONLY use include o

In C language!!!!

\"don\'t use stdlib.h or string.h, ONLY use #include <stdio.h> or <stdbool.h>!!!\"

Using Pointers:

A doubly linked list is a list in which each entry contains a pointer to the preceding entry in the list as well as a pointer to the next entry in the list. Define the appropriate structure definition for a doubly linked list entry and then write a small program that implements a small doubly linked list and prints out the elements of the list.

Solution

#include<stdio.h>

#include<stdlib.h>

struct node

{

    int data;

    struct node *next, *prev;

};

struct node *split(struct node *head);

struct node *merge(struct node *first, struct node *second)

{

        if (!first)

        return second;

    if (!second)

        return first;

   if (first->data < second->data)

    {

        first->next = merge(first->next,second);

        first->next->prev = first;

        first->prev = NULL;

        return first;

    }

    else

    {

        second->next = merge(first,second->next);

        second->next->prev = second;

        second->prev = NULL;

        return second;

    }

}

struct node *mergeSort(struct node *head)

{

    if (!head || !head->next)

        return head;

    struct node *second = split(head);

    head = mergeSort(head);

    second = mergeSort(second);

        return merge(head,second);

}

void insert(struct node **head, int data)

{

    struct node *temp =

        (struct node *)malloc(sizeof(struct node));

    temp->data = data;

    temp->next = temp->prev = NULL;

    if (!(*head))

        (*head) = temp;

    else

    {

        temp->next = *head;

        (*head)->prev = temp;

        (*head) = temp;

    }

}

void print(struct node *head)

{

    struct node *temp = head;

    printf(\"Forward Traversal using next poitner\ \");

    while (head)

    {

        printf(\"%d \",head->data);

        temp = head;

        head = head->next;

    }

    printf(\"\ Backword Traversal using prev pointer\ \");

    while (temp)

    {

        printf(\"%d \", temp->data);

        temp = temp->prev;

    }

}

void swap(int *A, int *B)

{

    int temp = *A;

    *A = *B;

    *B = temp;

}

struct node *split(struct node *head)

{

    struct node *fast = head,*slow = head;

    while (fast->next && fast->next->next)

    {

        fast = fast->next->next;

        slow = slow->next;

    }

    struct node *temp = slow->next;

    slow->next = NULL;

    return temp;

}

int main(void)

{

    struct node *head = NULL;

    insert(&head,5);

    insert(&head,20);

    insert(&head,4);

    insert(&head,3);

    insert(&head,30);

    insert(&head,10);

    head = mergeSort(head);

    printf(\"\ \ Linked List after sorting\ \");

    print(head);

    return 0;

}

In C language!!!! \
In C language!!!! \
In C language!!!! \
In C language!!!! \

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site