A doubly linked list or two way linked list is a type of linked list that contains a pointer to the next node as well as the previous node in the sequence.

That is, each node in a doubly-linked list consists of:
data– Data Item.prev– Address of previous node.next– Address of next node.
Representation of Doubly Linked List
In C, we can represent a doubly linked list node using structures as:
struct node
{
struct node *prev;
int data;
struct node *next;
};
Each struct node contains a data item, a pointer to the previous struct node, and a pointer to the next struct node.
The following example creates a basic Linked List with three items and displays its elements.
Example: Creating a Doubly Linked List
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
struct node *prev;
};
int main()
{
// Create and initialize nodes
struct node *head;
struct node *one = NULL;
struct node *two = NULL;
struct node *three = NULL;
struct node *current = NULL;
// Allocate memory for the nodes
one = (struct node*) malloc(sizeof(struct node));
two = (struct node*) malloc(sizeof(struct node));
three = (struct node*) malloc(sizeof(struct node));
// Assign data to nodes
one->data = 1;
two->data = 2;
three->data = 3;
// Connect first node
// with the second node
one->next = two;
// Connect second node
// with the third node
two->next = three;
// make next pointer of
//third node to NULL
//indicates last node
three->next = NULL;
//connect previous nodes
one->prev = NULL;
two->prev = one;
three->prev = two;
// Save address of first node in head
head = one;
current = head;
// print the linked list values forward
while(current != NULL)
{
printf("%d ", current->data);
current = current->next;
}
return 0;
}
Now we’ve made a doubly-linked list with three nodes.

Output
1 2 3
