Skip to main content

Print node from backward and forward direction of doubly linked list in c

C program for Print node from backward and forward direction of doubly linked list. Here problem description and explanation.

// Include header file
#include <stdio.h>
#include <stdlib.h>
/* 
  C program for
  Print node in forward and backward direction 
  in doubly linked list
*/
typedef struct LinkNode
{
	// Define useful field of LinkNode
	int key;
	struct LinkNode * next;
	struct LinkNode * back;
}LinkNode;

LinkNode * getLinkNode(int key)
{
	// Create dynamic memory of LinkNode
	LinkNode * ref = (LinkNode * ) malloc(sizeof(LinkNode));
	if (ref == NULL)
	{
		// Failed to create memory 
		return NULL;
	}
	// Setup initial values of node
	ref->key = key;
	ref->next = NULL;
	ref->back = NULL;
	return ref;
}

typedef struct DoublyLL
{
	// Define useful field of DoublyLL
	struct LinkNode * front;
	struct LinkNode * rear;
}DoublyLL;

DoublyLL * getDoublyLL()
{
	// Create dynamic memory of DoublyLL
	DoublyLL * ref = (DoublyLL * ) malloc(sizeof(DoublyLL));
	if (ref == NULL)
	{
		// Failed to create memory 
		return NULL;
	}
	// Set initial default value
	ref->front = NULL;
	ref->rear = NULL;
	return ref;
}
void addNode(DoublyLL * ref, int value)
{
	// Create a new node
	LinkNode * node = getLinkNode(value);
	if ((ref->front == NULL))
	{
		ref->front = node;
	}
	else
	{
		// Add Node at the end of linked list
		node->back = ref->rear;
		ref->rear->next = node;
	}
	// New last node
	ref->rear = node;
}
// Print linked list node from left to right 
// Forward direction
void forwardDirection(DoublyLL * ref)
{
	if ((ref->front == NULL))
	{
		printf("\n Empty linked list");
		return;
	}
	printf("\n Forward Direction Nodes\n");
	LinkNode * temp = ref->front;
	// iterating linked list elements
	while (temp != NULL)
	{
		// Display node value
		printf(" %d ", temp->key);
		// Visit to next node
		temp = temp->next;
	}
}
// Print linked list node from right to left 
// Backward direction
void backwardDirection(DoublyLL * ref)
{
	if ((ref->rear == NULL))
	{
		printf("\n Empty linked list");
		return;
	}
	printf("\n Backward Direction Nodes\n");
	// In case last node unknown then first find last node
	LinkNode * temp = ref->rear;
	// iterating linked list elements
	while (temp != NULL)
	{
		// Display node value
		printf(" %d ", temp->key);
		// Visit to previous node
		temp = temp->back;
	}
}
int main()
{
	DoublyLL * dll = getDoublyLL();
	// Add nodes
	addNode(dll, 24);
	addNode(dll, 4);
	addNode(dll, 21);
	addNode(dll, 10);
	addNode(dll, 13);
	addNode(dll, 15);
	addNode(dll, 28);
	// Constructing linked list
	// NULL ← 24 ⟷ 4 ⟷ 21 ⟷ 10 ⟷ 13 ⟷ 15 ⟷ 28 → NULL
	//         ↑                            ↑
	//         head                        rear
	forwardDirection(dll);
	backwardDirection(dll);
}

Output

 Forward Direction Nodes
 24  4  21  10  13  15  28
 Backward Direction Nodes
 28  15  13  10  21  4  24




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment