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;
}



