C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Q. Program to create and display a doubly linked list.
ExplanationIn this program, we will create a doubly linked list and print all the nodes present in the list. Doubly Linked List: Doubly Linked List is a variation of the linked list. The linked list is a linear data structure which can be described as the collection of nodes. Nodes are connected through pointers. Each node contains two fields: data and pointer to the next field. The first node of the linked list is called the head, and the last node of the list is called the tail of the list. One of the limitations of the singly linked list is that it can be traversed in only one direction that is forward. The doubly linked list has overcome this limitation by providing an additional pointer that points to the previous node. With the help of the previous pointer, the doubly linked list can be traversed in a backward direction thus making insertion and deletion operation easier to perform. So, a typical node in the doubly linked list consists of three fields: Data represents the data value stored in the node. Previous represents a pointer that points to the previous node. Next represents a pointer that points to next node in the list.
Above picture represents a doubly linked list in which each node has two pointers to point to previous and next node respectively. Here, node 1 represents the head of the list. The previous pointer of the head node will always point to NULL. Next pointer of node one will point to node 2. Node 5 represents the tail of the list whose previous pointer will point to node 4, and next will point to NULL. Algorithm
Solution
Python
#Represent a node of doubly linked list
class Node:
def __init__(self,data):
self.data = data;
self.previous = None;
self.next = None;
class DoublyLinkedList:
#Represent the head and tail of the doubly linked list
def __init__(self):
self.head = None;
self.tail = None;
#addNode() will add a node to the list
def addNode(self, data):
#Create a new node
newNode = Node(data);
#If list is empty
if(self.head == None):
#Both head and tail will point to newNode
self.head = self.tail = newNode;
#head's previous will point to None
self.head.previous = None;
#tail's next will point to None, as it is the last node of the list
self.tail.next = None;
else:
#newNode will be added after tail such that tail's next will point to newNode
self.tail.next = newNode;
#newNode's previous will point to tail
newNode.previous = self.tail;
#newNode will become new tail
self.tail = newNode;
#As it is last node, tail's next will point to None
self.tail.next = None;
#display() will print out the nodes of the list
def display(self):
#Node current will point to head
current = self.head;
if(self.head == None):
print("List is empty");
return;
print("Nodes of doubly linked list: ");
while(current != None):
#Prints each node by incrementing pointer.
print(current.data),;
current = current.next;
dList = DoublyLinkedList();
#Add nodes to the list
dList.addNode(1);
dList.addNode(2);
dList.addNode(3);
dList.addNode(4);
dList.addNode(5);
#Displays the nodes present in the list
dList.display();
Output: Nodes of doubly linked list: 1 2 3 4 5 C
#include <stdio.h>
//Represent a node of the doubly linked list
struct node{
int data;
struct node *previous;
struct node *next;
};
//Represent the head and tail of the doubly linked list
struct node *head, *tail = NULL;
//addNode() will add a node to the list
void addNode(int data) {
//Create a new node
struct node *newNode = (struct node*)malloc(sizeof(struct node));
newNode->data = data;
//If list is empty
if(head == NULL) {
//Both head and tail will point to newNode
head = tail = newNode;
//head's previous will point to NULL
head->previous = NULL;
//tail's next will point to NULL, as it is the last node of the list
tail->next = NULL;
}
else {
//newNode will be added after tail such that tail's next will point to newNode
tail->next = newNode;
//newNode's previous will point to tail
newNode->previous = tail;
//newNode will become new tail
tail = newNode;
//As it is last node, tail's next will point to NULL
tail->next = NULL;
}
}
//display() will print out the nodes of the list
void display() {
//Node current will point to head
struct node *current = head;
if(head == NULL) {
printf("List is empty\n");
return;
}
printf("Nodes of doubly linked list: \n");
while(current != NULL) {
//Prints each node by incrementing pointer.
printf("%d ", current->data);
current = current->next;
}
}
int main()
{
//Add nodes to the list
addNode(1);
addNode(2);
addNode(3);
addNode(4);
addNode(5);
//Displays the nodes present in the list
display();
return 0;
}
Output: Nodes of doubly linked list: 1 2 3 4 5 JAVA
public class DoublyLinkedList {
//Represent a node of the doubly linked list
class Node{
int data;
Node previous;
Node next;
public Node(int data) {
this.data = data;
}
}
//Represent the head and tail of the doubly linked list
Node head, tail = null;
//addNode() will add a node to the list
public void addNode(int data) {
//Create a new node
Node newNode = new Node(data);
//If list is empty
if(head == null) {
//Both head and tail will point to newNode
head = tail = newNode;
//head's previous will point to null
head.previous = null;
//tail's next will point to null, as it is the last node of the list
tail.next = null;
}
else {
//newNode will be added after tail such that tail's next will point to newNode
tail.next = newNode;
//newNode's previous will point to tail
newNode.previous = tail;
//newNode will become new tail
tail = newNode;
//As it is last node, tail's next will point to null
tail.next = null;
}
}
//display() will print out the nodes of the list
public void display() {
//Node current will point to head
Node current = head;
if(head == null) {
System.out.println("List is empty");
return;
}
System.out.println("Nodes of doubly linked list: ");
while(current != null) {
//Prints each node by incrementing the pointer.
System.out.print(current.data + " ");
current = current.next;
}
}
public static void main(String[] args) {
DoublyLinkedList dList = new DoublyLinkedList();
//Add nodes to the list
dList.addNode(1);
dList.addNode(2);
dList.addNode(3);
dList.addNode(4);
dList.addNode(5);
//Displays the nodes present in the list
dList.display();
}
}
Output: Nodes of doubly linked list: 1 2 3 4 5 C#
using System;
namespace DoublyLinkedList
{
public class Program
{
//Represent a node of the doubly linked list
public class Node<T>{
public T data;
public Node<T> previous;
public Node<T> next;
public Node(T value) {
data = value;
}
}
public class DoublyLinkedList<T>{
//Represent the head and tail of the doubly linked list
protected Node<T> head = null;
protected Node<T> tail = null;
//addNode() will add a node to the list
public void addNode(T data) {
//Create a new node
Node<T> newNode = new Node<T>(data);
//If list is empty
if(head == null) {
//Both head and tail will point to newNode
head = tail = newNode;
//head's previous will point to null
head.previous = null;
//tail's next will point to null, as it is the last node of the list
tail.next = null;
}
else {
//newNode will be added after tail such that tail's next will point to newNode
tail.next = newNode;
//newNode's previous will point to tail
newNode.previous = tail;
//newNode will become new tail
tail = newNode;
//As it is last node, tail's next will point to null
tail.next = null;
}
}
//display() will print out the nodes of the list
public void display() {
//Node current will point to head
Node<T> current = head;
if(head == null) {
Console.WriteLine("List is empty");
return;
}
Console.WriteLine("Nodes of doubly linked list: ");
while(current != null) {
//Prints each node by incrementing the pointer.
Console.Write(current.data + " ");
current = current.next;
}
}
}
public static void Main()
{
DoublyLinkedList<int> dList = new DoublyLinkedList<int>();
//Add nodes to the list
dList.addNode(1);
dList.addNode(2);
dList.addNode(3);
dList.addNode(4);
dList.addNode(5);
//Displays the nodes present in the list
dList.display();
}
}
}
Output: Nodes of doubly linked list: 1 2 3 4 5 PHP
<!DOCTYPE html>
<html>
<body>
<?php
//Represent a node of doubly linked list
class Node{
public $data;
public $previous;
public $next;
function __construct($data){
$this->data = $data;
}
}
class DoublyLinkedList{
//Represent the head and tail of the doubly linked list
public $head;
public $tail;
function __construct(){
$this->head = NULL;
$this->tail = NULL;
}
//addNode() will add a node to the list
function addNode($data){
//Create a new node
$newNode = new Node($data);
//If list is empty
if($this->head == NULL) {
//Both head and tail will point to newNode
$this->head = $this->tail = $newNode;
//head's previous will point to NULL
$this->head->previous = NULL;
//tail's next will point to NULL, as it is the last node of the list
$this->tail->next = NULL;
}
else {
//newNode will be added after tail such that tail's next will point to newNode
$this->tail->next = $newNode;
//newNode's previous will point to tail
$newNode->previous = $this->tail;
//newNode will become new tail
$this->tail = $newNode;
//As it is last node, tail's next will point to NULL
$this->tail->next = NULL;
}
}
//display() will print out the nodes of the list
function display() {
//Node current will point to head
$current = $this->head;
if($this->head == NULL) {
print("List is empty <br>");
return;
}
print("Nodes of doubly linked list: <br>");
while($current != NULL) {
//Prints each node by incrementing pointer.
print($current->data . " ");
$current = $current->next;
}
}
}
$dList = new DoublyLinkedList();
//Add nodes to the list
$dList->addNode(1);
$dList->addNode(2);
$dList->addNode(3);
$dList->addNode(4);
$dList->addNode(5);
//Displays the nodes present in the list
$dList->display();
?>
</body>
</html>
Output: Nodes of doubly linked list: 1 2 3 4 5
Next Topic#
|