Skip to content
geeksforgeeks
  • Tutorials
    • Python
    • Java
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
    • Practice Coding Problems
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • DSA
  • Interview Problems on Linked List
  • Practice Linked List
  • MCQs on Linked List
  • Linked List Tutorial
  • Types of Linked List
  • Singly Linked List
  • Doubly Linked List
  • Circular Linked List
  • Circular Doubly Linked List
  • Linked List vs Array
  • Time & Space Complexity
  • Advantages & Disadvantages
Open In App
Next Article:
Difference between Singly linked list and Doubly linked list
Next article icon

Doubly Linked List Tutorial

Last Updated : 29 May, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report
Try it on GfG Practice
redirect icon

A doubly linked list is a more complex data structure than a singly linked list, but it offers several advantages. The main advantage of a doubly linked list is that it allows for efficient traversal of the list in both directions. This is because each node in the list contains a pointer to the previous node and a pointer to the next node. This allows for quick and easy insertion and deletion of nodes from the list, as well as efficient traversal of the list in both directions.

Insertion-at-the-End-in-Doubly-Linked-List-copy
Doubly Linked List

Representation of Doubly Linked List in Data Structure

In a data structure, a doubly linked list is represented using nodes that have three fields:

  1. Data
  2. A pointer to the next node (next)
  3. A pointer to the previous node (prev)
Node-Structure-of-Doubly-Linked-List
Node Structure of Doubly Linked List

Node Definition

Here is how a node in a Doubly Linked List is typically represented:

C++
struct Node {      // To store the Value or data.     int data;      // Pointer to point the Previous Element     Node* prev;      // Pointer to point the Next Element     Node* next;        // Constructor     Node(int d) {        data = d;        prev = next = nullptr;           } }; 
C
struct Node {      // To store the Value or data.     int data;      // Pointer to point the Previous Element     Node* prev;      // Pointer to point the Next Element     Node* next; };  // Function to create a new node struct Node *createNode(int new_data) {     struct Node *new_node = (struct Node *)     malloc(sizeof(struct Node));     new_node->data = new_data;     new_node->next = NULL;     new_node->prev = NULL;     return new_node; } 
Java
class Node {      // To store the Value or data.     int data;      // Reference to the Previous Node     Node prev;        // Reference to the next Node     Node next;        // Constructor     Node(int d) {        data = d;        prev = next = null;           } }; 
Python
class Node:        def __init__(self, data):         # To store the value or data.         self.data = data          # Reference to the previous node         self.prev = None          # Reference to the next node         self.next = None 
C#
class Node {   	// To store the value or data     public int Data;       	// Pointer to the next node     public Node Next;       	// Pointer to the previous node     public Node Prev;       // Constructor     public Node(int d)     {         Data = d;         Prev = Next = null;           } } 
JavaScript
class Node {     constructor(data)     {         // To store the value or data.         this.data = data;          // Reference to the previous node         this.prev = null;          // Reference to the next node         this.next = null;     } } 

Each node in a Doubly Linked List contains the data it holds, a pointer to the next node in the list, and a pointer to the previous node in the list. By linking these nodes together through the next and prev pointers, we can traverse the list in both directions (forward and backward), which is a key feature of a Doubly Linked List.

Table of Content

  • Traversal in Doubly Linked List
  • Finding Length of Doubly Linked List
  • Insertion in a Doubly Linked List
  • Deletion in a Doubly Linked List
  • Advantages of Doubly Linked List
  • Disadvantages of Doubly Linked List
  • Applications of Doubly Linked List

1. Traversal in Doubly Linked List

Traversal in a Doubly Linked List involves visiting each node, processing its data, and moving to the next or previous node using the forward (next) and backward (prev) pointers.

Step-by-Step Approach for Traversal:

  1. Start from the head of the list.
  2. Traverse forward:
    • Visit the current node and process its data (e.g., print it).
    • Move to the next node using current = current->next.
    • Repeat the process until the end of the list (current == NULL).
  3. Optionally, traverse backward:
    • Start from the tail (last node).
    • Visit the current node and process its data.
    • Move to the previous node using current = current->prev.
    • Repeat the process until the beginning of the list (current == NULL).

Traversal is useful for displaying or processing all nodes in a doubly linked list.

To read more about Traversal Operation Refer, Traversal in Doubly Linked List

2. Finding Length of Doubly Linked List

A Doubly Linked List (DLL) is a type of linked list where each node has two pointers:

  1. One pointing to the next node in the sequence.
  2. One pointing to the previous node in the sequence.

To find the length of a doubly linked list, we need to traverse the list while counting the nodes.

Step-by-Step Approach for finding length:

  1. Initialize a counter: Start with a counter variable (count = 0).
  2. Set a pointer to the head node: Use a pointer (current) and initialize it to the head of the linked list.
  3. Traverse the list:
    • While the pointer (current) is not NULL, increment the count by 1.
    • Move to the next node (current = current.next).
  4. Stop at the end of the list: When the pointer reaches NULL, stop the loop.
  5. Return the count: The final value of count gives the length of the doubly linked list.

To read more about Finding Length of DLL Refer, Program to find size of Doubly Linked List

3. Insertion in a Doubly Linked List

Insertion in a Doubly Linked List (DLL) involves adding a new node at a specific position while maintaining the connections between nodes. Since each node contains a pointer to both the previous and next node, insertion requires adjusting these pointers carefully.

There are three primary types of insertion in a DLL:

1. Insertion at the Beginning

  1. Create a new node with the given data.
  2. Set the next pointer of the new node to the current head.
  3. If the list is not empty, update the prev pointer of the current head to point to the new node.
  4. Update the head of the list to the new node.

Read more about Insertion at the Beginning Refer, Insert a Node at Front/Beginning of Doubly Linked List

2. Insertion at the End

  1. Create a new node with the given data.
  2. If the list is empty, set the new node as the head.
  3. Traverse the list until the last node is found.
  4. Set the next pointer of the last node to the new node.
  5. Set the prev pointer of the new node to the last node.

Read more about Insertion at the End Refer, Insert a Node at the end of Doubly Linked List

3. Insertion at a Specific Position

  1. Create a new node with the given data.
  2. If inserting at the beginning, follow the steps for insertion at the start.
  3. Traverse the list to find the node after which insertion is needed.
  4. Set the next pointer of the new node to the next node of the current position.
  5. Set the prev pointer of the new node to the current node.
  6. Update the prev pointer of the next node to point to the new node (if it exists).
  7. Update the next pointer of the previous node to point to the new node.

Read more about Insertion at a specific position Refer, Insert a Node at a specific position in Doubly Linked List

4. Deletion in a Doubly Linked List

Deletion in a Doubly Linked List (DLL) involves removing a node while maintaining the integrity of the list. Since each node contains pointers to both its previous and next nodes, deletion requires careful pointer adjustments to ensure no broken links occur.

Types of Deletion in a Doubly Linked List

1. Deletion at the Beginning

  1. Check if the list is empty; if it is, return as there is nothing to delete.
  2. Store the current head node in a temporary variable.
  3. Move the head pointer to the next node.
  4. If the new head exists, update its prev pointer to NULL.
  5. Delete the old head node to free memory.

Read more about Deletion at the Beginning Refer, Deletion at beginning (Removal of first node) in a Doubly Linked List

2. Deletion at the End

  1. Check if the list is empty; if it is, return.
  2. Traverse the list to find the last node.
  3. Store the last node in a temporary variable.
  4. Update the next pointer of the second-last node to NULL, making it the new tail.
  5. Delete the last node to free memory.

Read more about Deletion at the End Refer, Deletion at end (Removal of last node) in a Doubly Linked List

3. Deletion at a Specific Position

  1. Check if the list is empty; if it is, return.
  2. Traverse the list to find the node to be deleted.
  3. Store the node to be deleted in a temporary variable.
  4. Update the next pointer of the previous node to point to the next node.
  5. Update the prev pointer of the next node to point to the previous node (if it exists).
  6. Delete the target node to free memory.

Read more about Deletion at a specific position Refer, Delete a Doubly Linked List node at a given position

Advantages of Doubly Linked List

  • Efficient traversal in both directions: Doubly linked lists allow for efficient traversal of the list in both directions, making it suitable for applications where frequent insertions and deletions are required.
  • Easy insertion and deletion of nodes: The presence of pointers to both the previous and next nodes makes it easy to insert or delete nodes from the list, without having to traverse the entire list.
  • Can be used to implement a stack or queue: Doubly linked lists can be used to implement both stacks and queues, which are common data structures used in programming.

Disadvantages of Doubly Linked List

  • More complex than singly linked lists: Doubly linked lists are more complex than singly linked lists, as they require additional pointers for each node.
  • More memory overhead: Doubly linked lists require more memory overhead than singly linked lists, as each node stores two pointers instead of one.

Applications of Doubly Linked List

  • Implementation of undo and redo functionality in text editors.
  • Cache implementation where quick insertion and deletion of elements are required.
  • Browser history management to navigate back and forth between visited pages.
  • Music player applications to manage playlists and navigate through songs efficiently.
  • Implementing data structures like Deque (double-ended queue) for efficient insertion and deletion at both ends.

Practice Questions on Doubly Linked List
MCQs on Linked List



Next Article
Difference between Singly linked list and Doubly linked list

H

harendrakumar123
Improve
Article Tags :
  • Linked List
  • Data Structures
  • DSA
  • doubly linked list
  • DSA Tutorials
Practice Tags :
  • Data Structures
  • Linked List

Similar Reads

    Doubly Linked List meaning in DSA
    A doubly linked list is a special type of linked list in which each node contains a pointer to the previous node as well as the next node in the structure. Doubly Linked ListCharacteristics of the Doubly Linked List: The characteristics of a doubly linked list are as follows: Dynamic size: The size
    3 min read
    Doubly Linked List Tutorial
    A doubly linked list is a more complex data structure than a singly linked list, but it offers several advantages. The main advantage of a doubly linked list is that it allows for efficient traversal of the list in both directions. This is because each node in the list contains a pointer to the prev
    8 min read
    Difference between Singly linked list and Doubly linked list
    Introduction to Singly linked list : A singly linked list is a set of nodes where each node has two fields 'data' and 'link'. The 'data' field stores actual piece of information and 'link' field is used to point to next node. Basically the 'link' field stores the address of the next node. Introducti
    2 min read
    Applications, Advantages and Disadvantages of Doubly Linked List
    Doubly linked list is a type of linked list in which nodes contains information and two pointers i.e. left pointer and right pointer. The left pointer in the doubly linked list points to the previous node and the right pointer points to the next node in the linked list. The first node of the doubly
    4 min read

    Operations on Doubly Linked

    Operations of Doubly Linked List with Implementation
    A Doubly Linked List (DLL) contains an extra pointer, typically called the previous pointer, together with the next pointer and data which are there in a singly linked list. Below are operations on the given DLL: Add a node at the front of DLL: The new node is always added before the head of the giv
    15+ min read
    Insertion in a Doubly Linked List
    Inserting a new node in a doubly linked list is very similar to inserting new node in linked list. There is a little extra work required to maintain the link of the previous node. In this article, we will learn about different ways to insert a node in a doubly linked list.Table of ContentInsertion a
    6 min read
    Search an element in a Doubly Linked List
    Given a Doubly linked list(DLL) containing n nodes and an integer x, the task is to find the position of the integer x in the doubly linked list. If no such position found then print -1.Examples:Input: Linked List = 18 <-> 15 <-> 8 <-> 9 <-> 14, x = 8 Output: 3 Explanation: x
    7 min read
    Deletion in a Doubly Linked List
    Deleting a node in a doubly linked list is very similar to deleting a node in a singly linked list. However, there is a little extra work required to maintain the links of both the previous and next nodes. In this article, we will learn about different ways to delete a node in a doubly linked list.E
    15+ min read
    Delete a Doubly Linked List node at a given position
    Given a doubly linked list and a position pos, the task is to delete the node at the given position from the beginning of Doubly Linked List.Input: LinkedList: 1<->2<->3, pos = 2Output: LinkedList: 1<->3Input: LinkedList: 1<->2<->3, pos = 1Output: LinkedList: 2<->
    9 min read

    Doubly Linked List in Different Languages

    How to Create a Doubly Linked List in C?
    A doubly linked list is a type of linked list in which each node contains a pointer to both the next node and the previous node. This allows traversal in both forward and backward directions. Each node in a doubly linked list stores data, a pointer to the next node, and a pointer to the previous nod
    4 min read
    Introduction to Doubly Linked Lists in Java
    Doubly linked list is a data structure that has reference to both the previous and next nodes in the list. It provides simplicity to traverse, insert and delete the nodes in both directions in a list. In a doubly linked list, each node contains three data members: data: The data stored in the nodene
    11 min read
    Implementation of Doubly Linked List in JavaScript
    This article will demonstrate the Implementation of Doubly Linked List In JavaScript. A doubly linked list (DLL) is a special type of linked list in which each node contains a pointer to the previous node as well as the next node of the linked list. Doubly Linked List in JavaScriptTo create we have
    4 min read
    Memory efficient doubly linked list
    We need to implement a doubly linked list with the use of a single pointer in each node. For that we are given a stream of data of size n for the linked list, your task is to make the function insert() and getList(). The insert() function pushes (or inserts at the beginning) the given data in the li
    9 min read
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences