Skip to content
geeksforgeeks
  • 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
  • Tutorials
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
  • Practice
    • Build your AI Agent
    • GfG 160
    • Problem of the Day
    • Practice Coding Problems
    • GfG SDE Sheet
  • Contests
    • Accenture Hackathon (Ending Soon!)
    • GfG Weekly [Rated Contest]
    • Job-A-Thon Hiring Challenge
    • All Contests and Events
  • 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:
Delete a Doubly Linked List node at a given position
Next article icon

Deletion in a Doubly Linked List

Last Updated : 04 Sep, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report
Try it on GfG Practice
redirect icon

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.

Example:

Input: DLL = 1 <-> 2 <->3 , Node = 1
Output:  2 <-> 3

Input: DLL = 2 <-> 45 <-> 3 <-> 1, Node = 45
Output:  2 <-> 3<-> 1

Table of Content

  • Deletion at the Beginning in Doubly Linked List
  • Deletion after a given node in Doubly Linked List
  • Deletion before a given node in Doubly Linked List
  • Deletion at a specific position in Doubly Linked List
  • Deletion at the End in Doubly Linked List

Deletion at the Beginning in Doubly Linked List

The idea is to update the head of the doubly linked list to the node next to head node and if the new head is not NULL, then set the previous pointer of new head to NULL.

Deletion-at-the-Beginning-of-Doubly-Linked-List

Deletion at the beginning of Doubly Linked List

To delete a node at the beginning in doubly linked list, we can use the following steps:

  • Check if the list is empty, there is nothing to delete, return.
  • Store the head pointer in a variable, say temp.
  • Update the head of linked list to the node next to the current head, head = head->next.
  • If the new head is not NULL, update the previous pointer of new head to NULL, head->prev = NULL.

Below is the implementation of the above approach:

C++
// C++ Program to delete a node from the beginning // of a doubly linked list using class for Node  #include <iostream> using namespace std;  class Node { public:     int data;     Node* prev;     Node* next;      Node(int d) {         data = d;         prev = next = nullptr;     } };  // Deletes the first node (head) of the list  // and returns the new head Node* delHead(Node* head) {        // If the list is empty, return nullptr     if (head == nullptr) {         return nullptr;     }      // Store the current head node to delete     Node* temp = head;      // Move head to the next node     head = head->next;      // Set the previous pointer of the   	// new head to nullptr     if (head != nullptr) {         head->prev = nullptr;     }      // Free the memory of the old head node     delete temp;      // Return the new head of the list     return head; }  void printList(Node* head) {     Node* curr = head;     while (curr != nullptr) {         cout << curr->data << " ";         curr = curr->next;     }     cout << endl; }  int main() {        // Create a hardcoded doubly linked list:     // 1 <-> 2 <-> 3     Node* head = new Node(1);     head->next = new Node(2);     head->next->prev = head;     head->next->next = new Node(3);     head->next->next->prev = head->next;      head = delHead(head);     printList(head);      return 0; } 
C
// C Program to delete a node from the // beginning of Doubly Linked List  #include <stdio.h>  struct Node {     int data;     struct Node *prev;     struct Node *next; };  // Function to delete the first node (head) of the  // list and return the second node as the new head struct Node *delHead(struct Node *head) {        // If empty, return NULL     if (head == NULL)         return NULL;      // Store in temp for deletion later     struct Node *temp = head;      // Move head to the next node     head = head->next;      // Set prev of the new head     if (head != NULL)         head->prev = NULL;      // Free memory and return new head     free(temp);     return head; }  void printList(struct Node *head) {     struct Node *curr = head;     while (curr != NULL) {         printf("%d ", curr->data);         curr = curr->next;     }     printf("\n"); }  struct Node *createNode(int data) {     struct Node *newNode =        (struct Node *)malloc(sizeof(struct Node));     newNode->data = data;     newNode->prev = NULL;     newNode->next = NULL;     return newNode; }  int main() {      // Create a hardcoded doubly linked list:     // 1 <-> 2 <-> 3     struct Node *head = createNode(1);     head->next = createNode(2);     head->next->prev = head;     head->next->next = createNode(3);     head->next->next->prev = head->next;        head = delHead(head);      printList(head);     return 0; } 
Java
// Java Program to delete a node from the  // beginning of Doubly Linked List  class Node {     int data;     Node next;     Node prev;      Node(int x) {         data = x;         next = null;         prev = null;     } }  class GfG {      // Function to delete the first node (head) of the     // list and return the second node as the new head     static Node delHead(Node head) {                // If empty, return null         if (head == null) {             return null;         }          // Store in temp for deletion later         Node temp = head;          // Move head to the next node         head = head.next;          // Set prev of the new head         if (head != null) {             head.prev = null;         }          // Return new head         return head;     }      static void printList(Node head) {         Node curr = head;         while (curr != null) {             System.out.print(curr.data + " ");             curr = curr.next;         }         System.out.println();     }      public static void main(String[] args) {                // Create a hardcoded doubly linked list:         // 1 <-> 2 <-> 3         Node head = new Node(1);         head.next = new Node(2);         head.next.prev = head;         head.next.next = new Node(3);         head.next.next.prev = head.next;          head = delHead(head);         printList(head);     } } 
Python
# Python Program to delete a node from the  # beginning of Doubly Linked List  class Node:     def __init__(self, data):         self.data = data         self.prev = None         self.next = None  # Function to delete the first node (head) of the list # and return the second node as the new head def del_head(head):        # If empty, return None     if head is None:         return None      # Store in temp for deletion later     temp = head      # Move head to the next node     head = head.next      # Set prev of the new head     if head is not None:         head.prev = None      # Return new head     return head  def print_list(head):     curr = head     while curr is not None:         print(curr.data, end=" ")         curr = curr.next     print()       if __name__ == "__main__":        # Create a hardcoded doubly linked list:     # 1 <-> 2 <-> 3     head = Node(1)     head.next = Node(2)     head.next.prev = head     head.next.next = Node(3)     head.next.next.prev = head.next      head = del_head(head)     print_list(head) 
C#
// C# Program to delete a node from the // beginning of Doubly Linked List using System; class Node {     public int data;     public Node next;     public Node prev;      public Node(int x) {         data = x;         next = null;         prev = null;     } }  class GfG {            // Deletes the first node (head) of the list     // and returns the second node as the new head     static Node DelHead(Node head) {                // If empty, return null         if (head == null)             return null;          // Move head to the next node         head = head.next;          // Set prev of the new head         if (head != null)             head.prev = null;          // Return new head         return head;     }      static void PrintList(Node head) {         Node curr = head;         while (curr != null) {             Console.Write(curr.data + " ");             curr = curr.next;         }         Console.WriteLine();     }      static void Main() {                // Create a hardcoded doubly linked list:         // 1 <-> 2 <-> 3         Node head = new Node(1);         head.next = new Node(2);         head.next.prev = head;         head.next.next = new Node(3);         head.next.next.prev = head.next;          head = DelHead(head);         PrintList(head);     } } 
JavaScript
// JavaScript Program to delete a node from the  // beginning of Doubly Linked List class Node {     constructor(data) {         this.data = data;         this.prev = null;         this.next = null;     } }  // Deletes the first node (head) of the list and  // returns the second node as the new head function delHead(head) {      // If empty, return null     if (head === null) {         return null;     }      // Store in temp for deletion later     let temp = head;      // Move head to the next node     head = head.next;      // Set prev of the new head     if (head !== null) {         head.prev = null;     }      // Return new head     return head; }  function printList(head) {     let curr = head;     let output = '';     while (curr !== null) {         output += curr.data + ' ';         curr = curr.next;     }     console.log(output.trim()); }  // Create a hardcoded doubly linked list: // 1 <-> 2 <-> 3 let head = new Node(1); head.next = new Node(2); head.next.prev = head; head.next.next = new Node(3); head.next.next.prev = head.next;  head = delHead(head); printList(head); 

Output
2 3  

Time Complexity: O(1),  Since traversal of the linked list is not required.
Auxiliary Space: O(1)

Deletion after a given node in Doubly Linked List

1

Deletion after a given node in Doubly Linked List

To delete a node after a specific node in a doubly linked list, we can use the following steps:

  • Initialize a variable , say curr points to the node with the key value in the linked list.
  • if found , check if curr->next is not NULL.
    • If it’s NULL then there is no node to delete , return.
    • else , set a pointer nodeDelete to curr->next, which is the node to be deleted.
    • Update curr->next to point to nodeDelete->next.
    • If nodeDelete->next is not NULL, update the previous pointer of nodeDelete->next to curr.
  • Delete nodeDelete to free memory.
C++
// C++ Program to delete a node after  // a given node of doubly linked list  #include <iostream> using namespace std;  class Node {   public:     int data;     Node *next;     Node *prev;      Node(int new_data) {         data = new_data;         next = nullptr;         prev = nullptr;     } };  // Function to delete a node after a given  // node in doubly linked list Node *deleteAfter(Node *head, int key) {     Node *curr = head;      // Iterate over Linked List to find the key     while (curr != nullptr) {         if (curr->data == key)             break;         curr = curr->next;     }      // If curr is NULL or curr->next is NULL,   	 // there is no node to delete     if (curr == nullptr || curr->next == nullptr)         return head;      // Node to be deleted     Node *nodeDelete = curr->next;      // Update the next of the current node    	// to the next of the node to be deleted     curr->next = nodeDelete->next;      // If the node to be deleted is not the last node,   	// update the previous pointer of the next node     if (nodeDelete->next != nullptr) {         nodeDelete->next->prev = curr;     }      // Free the memory of the node to be deleted     delete nodeDelete;     return head; }  void printList(Node *head) {     Node *curr = head;     while (curr != nullptr) {         cout << " " << curr->data;         curr = curr->next;     }     cout << endl; }  int main() {        // Create a hardcoded doubly linked list:     // 1 <-> 2 <-> 3 <-> 4     Node *head = new Node(1);     head->next = new Node(2);     head->next->prev = head;     head->next->next = new Node(3);     head->next->next->prev = head->next;     head->next->next->next = new Node(4);     head->next->next->next->prev = head->next->next;      head = deleteAfter(head, 2);     printList(head);      return 0; } 
C
// C Program to delete a node after a given // node of doubly linked list  #include <stdio.h> #include <stdlib.h>  struct Node {     int data;     struct Node *next;     struct Node *prev; };    // Function to delete a node after a given  // node in doubly linked list struct Node *deleteAfter(struct Node *head, int key) {     struct Node *curr = head;      // Iterate over Linked List to find the key     while (curr != NULL) {         if (curr->data == key)             break;         curr = curr->next;     }      // If curr is NULL or curr->next is NULL,    	// there is no node to delete     if (curr == NULL || curr->next == NULL)         return head;      // Node to be deleted     struct Node *nodeDelete = curr->next;      // Update the next of the current node to the    	//next of the node to be deleted     curr->next = nodeDelete->next;      // If the node to be deleted is not the last node,   	// update the previous pointer of the next node     if (nodeDelete->next != NULL) {         nodeDelete->next->prev = curr;     }      // Free the memory of the node to be deleted     free(nodeDelete);      return head; }  void printList(struct Node *head) {     struct Node *curr = head;     while (curr != NULL) {         printf("%d ", curr->data);         curr = curr->next;     }     printf("\n"); }  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; }  int main() {        // Create a hardcoded doubly linked list:     // 1 <-> 2 <-> 3 <-> 4     struct Node *head = createNode(1);     head->next = createNode(2);     head->next->prev = head;     head->next->next = createNode(3);     head->next->next->prev = head->next;     head->next->next->next = createNode(4);     head->next->next->next->prev = head->next->next;      head = deleteAfter(head, 2);     printList(head);      return 0; } 
Java
// Java Program to delete a node after a given node of // doubly linked list  class Node {     int data;     Node next;     Node prev;      Node(int x) {         data = x;         next = null;         prev = null;     } }  class GfG {        // Function to delete a node after a given node in     // doubly linked list     static Node deleteAfter(Node head, int key) {         Node curr = head;          // Iterate over Linked List to find the key         while (curr != null) {             if (curr.data == key)                 break;             curr = curr.next;         }          // If curr is null or curr.next is null, there is no         // node to delete         if (curr == null || curr.next == null)             return head;          // Node to be deleted         Node nodeDelete = curr.next;          // Update the next of the current node to the next         // of the node to be deleted         curr.next = nodeDelete.next;          // If the node to be deleted is not the last node,         // update the previous pointer of the next node         if (nodeDelete.next != null) {             nodeDelete.next.prev = curr;         }          return head;     }      static void printList(Node head) {         Node curr = head;         while (curr != null) {             System.out.print(" " + curr.data);             curr = curr.next;         }         System.out.println();     }      public static void main(String[] args) {                // Create a hardcoded doubly linked list:         // 1 <-> 2 <-> 3 <-> 4         Node head = new Node(1);         head.next = new Node(2);         head.next.prev = head;         head.next.next = new Node(3);         head.next.next.prev = head.next;         head.next.next.next = new Node(4);         head.next.next.next.prev = head.next.next;          head = deleteAfter(head, 2);         printList(head);     } } 
Python
# Python Program to delete a node after a given # node of doubly linked list class Node:     def __init__(self, new_data):         self.data = new_data         self.next = None         self.prev = None   def delete_after(head, key):     curr = head      # Iterate over Linked List to find the key     while curr is not None:         if curr.data == key:             break         curr = curr.next      # If curr is None or curr.next is None,      # there is no node to delete     if curr is None or curr.next is None:         return head      # Node to be deleted     node_delete = curr.next      # Update the next of the current node to      # the next of the node to be deleted     curr.next = node_delete.next      # If the node to be deleted is not the last node,     # update the previous pointer of the next node     if node_delete.next is not None:         node_delete.next.prev = curr      return head  def print_list(head):     curr = head     while curr is not None:         print(curr.data, end=" ")         curr = curr.next     print()   if __name__ == "__main__":        # Create a hardcoded doubly linked list:     # 1 <-> 2 <-> 3 <-> 4     head = Node(1)     head.next = Node(2)     head.next.prev = head     head.next.next = Node(3)     head.next.next.prev = head.next     head.next.next.next = Node(4)     head.next.next.next.prev = head.next.next      head = delete_after(head, 2)     print_list(head) 
C#
// C# Program to delete a node after a given node of doubly // linked list  using System;  class Node {     public int data;     public Node next;     public Node prev;      public Node(int x) {         data = x;         next = null;         prev = null;     } }  class GfG {        // Function to delete a node after a given node in     // doubly linked list     static Node DeleteAfter(Node head, int key) {         Node curr = head;          // Iterate over Linked List to find the key         while (curr != null) {             if (curr.data == key)                 break;             curr = curr.next;         }          // If curr is null or curr.next is null, there is no         // node to delete         if (curr == null || curr.next == null)             return head;          // Node to be deleted         Node nodeToDelete = curr.next;          // Update the next of the current node to the next         // of the node to be deleted         curr.next = nodeToDelete.next;          // If the node to be deleted is not the last node,         // update the prev pointer of the next node         if (nodeToDelete.next != null) {             nodeToDelete.next.prev = curr;         }          return head;     }      static void PrintList(Node head) {         Node curr = head;         while (curr != null) {             Console.Write(" " + curr.data);             curr = curr.next;         }         Console.WriteLine();     }      static void Main(string[] args) {                // Create a hardcoded doubly linked list:         // 1 <-> 2 <-> 3 <-> 4         Node head = new Node(1);         head.next = new Node(2);         head.next.prev = head;         head.next.next = new Node(3);         head.next.next.prev = head.next;         head.next.next.next = new Node(4);         head.next.next.next.prev = head.next.next;          head = DeleteAfter(head, 2);         PrintList(head);     } } 
JavaScript
// JavaScript Program to delete a node after a given node of // doubly linked list  class Node {     constructor(data) {         this.data = data;         this.next = null;         this.prev = null;     } }  // Function to delete a node after a given node in doubly // linked list function deleteAfter(head, key) {     let curr = head;      // Iterate over Linked List to find the key     while (curr !== null) {         if (curr.data === key)             break;         curr = curr.next;     }      // If curr is null or curr.next is null, there is no     // node to delete     if (curr === null || curr.next === null)         return head;      // Node to be deleted     let nodeToDelete = curr.next;      // Update the next of the current node to the next of     // the node to be deleted     curr.next = nodeToDelete.next;      // If the node to be deleted is not the last node,     // update the previous pointer of the next node     if (nodeToDelete.next !== null) {         nodeToDelete.next.prev = curr;     }      return head; }  function printList(head) {     let curr = head;     while (curr !== null) {         console.log(curr.data + " ");         curr = curr.next;     }     console.log(); }  // Create a hardcoded doubly linked list: // 1 <-> 2 <-> 3 <-> 4 let head = new Node(1); head.next = new Node(2); head.next.prev = head; head.next.next = new Node(3); head.next.next.prev = head.next; head.next.next.next = new Node(4); head.next.next.next.prev = head.next.next;  head = deleteAfter(head, 2); printList(head); 

Output
 1 2 4 

Time Complexity: O(n), where n is the number of nodes in doubly linked list.
Auxiliary Space: O(1)

Deletion before a given node in Doubly Linked List

2

Deletion before a given node in Doubly Linked List

To delete a node before a specific node in a doubly linked list, we can use the following steps:

  • Initialize a variable , say curr points to the node with the key value in the linked list.
  • if found , check if curr->prev is not NULL.
    • If it’s NULL, the node to be deleted is the head node, so there is no node to delete before it.
    • else , set a pointer nodeDelete to curr->prev, which is the node to be deleted.
    • Update curr->prev to point to nodeDelete ->prev.
    • If nodeDelete ->prev is not NULL, update nodeDelete->prev->next point to curr.
  • Delete nodeDelete to free memory.
C++
// C++ Program to delete a node before a given node // of doubly linked list #include <iostream> using namespace std;  class Node {   public:     int data;     Node *next;     Node *prev;      Node(int x) {         data = x;         next = nullptr;         prev = nullptr;     } };  // Function to delete a node before a given  // node in a doubly linked list Node *deleteBefore(Node *head, int key) {     Node *curr = head;      // Find the node with the given key     while (curr != nullptr) {         if (curr->data == key)             break;         curr = curr->next;     }      // If curr is nullptr or curr->prev is nullptr,   	// there is no node to delete     if (curr == nullptr || curr->prev == nullptr)         return head;      // Node to be deleted     Node *nodeDelete = curr->prev;      // Update the prev of the current node   	// to the prev of the node to be deleted     curr->prev = nodeDelete->prev;      // If nodeDelete's prev is not nullptr,   	// update its next pointer to the current node     if (nodeDelete->prev != nullptr) {         nodeDelete->prev->next = curr;     }     else {         // If nodeDelete is the head node         head = curr;     }      // Free the memory of the node to be deleted     delete nodeDelete;     return head; }  void printList(Node *head) {     Node *curr = head;     while (curr != nullptr)     {         cout << curr->data << " ";         curr = curr->next;     }     cout << endl; }  int main() {        // Create a hardcoded doubly linked list:     // 1 <-> 2 <-> 3 <-> 4     Node *head = new Node(1);     head->next = new Node(2);     head->next->prev = head;     head->next->next = new Node(3);     head->next->next->prev = head->next;     head->next->next->next = new Node(4);     head->next->next->next->prev = head->next->next;      head = deleteBefore(head, 3);     printList(head);      return 0; } 
C
// C Program to delete a node before a given node // of doubly linked list #include <stdio.h> #include <stdlib.h>  struct Node {     int data;     struct Node *next;     struct Node *prev; };  // Function to delete a node before a given  // node in a doubly linked list struct Node *deleteBefore(struct Node *head, int key) {     struct Node *curr = head;      // Find the node with the given key     while (curr != NULL) {         if (curr->data == key)             break;         curr = curr->next;     }      // If curr is NULL or curr->prev is NULL,    	// there is no node to delete     if (curr == NULL || curr->prev == NULL)         return head;      // Node to be deleted     struct Node *nodeToDelete = curr->prev;      // Update the prev of the current node to    	// the prev of the node to be deleted     curr->prev = nodeToDelete->prev;      // If nodeToDelete's prev is not NULL, update    	// its next pointer to the current node     if (nodeToDelete->prev != NULL) {         nodeToDelete->prev->next = curr;     }     else {         // If nodeToDelete is the head node         head = curr;     }      // Free the memory of the node to be deleted     free(nodeToDelete);      return head; }  void printList(struct Node *head) {     struct Node *curr = head;     while (curr != NULL) {         printf(" %d", curr->data);         curr = curr->next;     }     printf("\n"); }  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; } int main() {        // Create a hardcoded doubly linked list:     // 1 <-> 2 <-> 3 <-> 4     struct Node *head = createNode(1);     head->next = createNode(2);     head->next->prev = head;     head->next->next = createNode(3);     head->next->next->prev = head->next;     head->next->next->next = createNode(4);     head->next->next->next->prev = head->next->next;      head = deleteBefore(head, 3);     printList(head);      return 0; } 
Java
// Java Program to delete a node before a given node of // doubly linked list  class Node {     int data;     Node next;     Node prev;      Node(int x) {         data = x;         next = null;         prev = null;     } }  class GfG {        // Function to delete a node before a given node in a     // doubly linked list     static Node deleteBefore(Node head, int key) {         Node curr = head;          // Find the node with the given key         while (curr != null) {             if (curr.data == key)                 break;             curr = curr.next;         }          // If curr is null or curr.prev is null, there is no         // node to delete         if (curr == null || curr.prev == null)             return head;          // Node to be deleted         Node nodeToDelete = curr.prev;          // Update the prev of the current node to the prev         // of the node to be deleted         curr.prev = nodeToDelete.prev;          // If nodeToDelete's prev is not null, update its         // next pointer to the current node         if (nodeToDelete.prev != null) {             nodeToDelete.prev.next = curr;         }         else {                        // If nodeToDelete is the head node             head = curr;         }          return head;     }      static void printList(Node head) {         Node curr = head;         while (curr != null) {             System.out.print(curr.data + " ");             curr = curr.next;         }         System.out.println();     }      public static void main(String[] args) {                // Create a hardcoded doubly linked list:         // 1 <-> 2 <-> 3 <-> 4         Node head = new Node(1);         head.next = new Node(2);         head.next.prev = head;         head.next.next = new Node(3);         head.next.next.prev = head.next;         head.next.next.next = new Node(4);         head.next.next.next.prev = head.next.next;          head = deleteBefore(head, 3);         printList(head);     } } 
Python
# Python Program to delete a node before a # given node of doubly linked list class Node:     def __init__(self, data):         self.data = data         self.next = None         self.prev = None  def delete_before(head, key):     curr = head      # Find the node with the given key     while curr is not None:         if curr.data == key:             break         curr = curr.next      # If curr is None or curr.prev is None,     # there is no node to delete     if curr is None or curr.prev is None:         return head      # Node to be deleted     nodeToDelete = curr.prev      # Update the prev of the current node to the prev      # of the node to be deleted     curr.prev = nodeToDelete.prev      # If nodeToDelete's prev is not None, update its      # next pointer to the current node     if nodeToDelete.prev is not None:         nodeToDelete.prev.next = curr     else:         # If nodeToDelete is the head node         head = curr      return head   def print_list(head):     curr = head     while curr:         print(curr.data, end=' ')         curr = curr.next     print()  if __name__ == "__main__":    	# Create a hardcoded doubly linked list:     # 1 <-> 2 <-> 3 <-> 4     head = Node(1)     head.next = Node(2)     head.next.prev = head     head.next.next = Node(3)     head.next.next.prev = head.next     head.next.next.next = Node(4)     head.next.next.next.prev = head.next.next      head = delete_before(head, 3)     print_list(head) 
C#
// C# Program to delete a node before a given node of doubly // linked list  using System;  class Node {     public int data;     public Node next;     public Node prev;      public Node(int x) {         data = x;         next = null;         prev = null;     } }  class GfG {        // Function to delete a node before a given node in a     // doubly linked list     static Node DeleteBefore(Node head, int key) {         Node curr = head;          // Find the node with the given key         while (curr != null) {             if (curr.data == key)                 break;             curr = curr.next;         }          // If curr is null or curr.prev is null, there is no         // node to delete         if (curr == null || curr.prev == null)             return head;          // Node to be deleted         Node nodeToDelete = curr.prev;          // Update the prev of the current node to the prev         // of the node to be deleted         curr.prev = nodeToDelete.prev;          // If nodeToDelete's prev is not null, update its         // next pointer to the current node         if (nodeToDelete.prev != null) {             nodeToDelete.prev.next = curr;         }         else {             // If nodeToDelete is the head node             head = curr;         }          return head;     }      static void PrintList(Node head) {         Node curr = head;         while (curr != null) {             Console.Write(curr.data + " ");             curr = curr.next;         }         Console.WriteLine();     }      static void Main() {                // Create a hardcoded doubly linked list:         // 1 <-> 2 <-> 3 <-> 4         Node head = new Node(1);         head.next = new Node(2);         head.next.prev = head;         head.next.next = new Node(3);         head.next.next.prev = head.next;         head.next.next.next = new Node(4);         head.next.next.next.prev = head.next.next;          head = DeleteBefore(head, 3);         PrintList(head);     } } 
JavaScript
// JavaScript Program to delete a node before a given node // of doubly linked list  class Node {     constructor(data) {         this.data = data;         this.next = null;         this.prev = null;     } }  // Function to delete a node before a given node in a doubly // linked list function deleteBefore(head, key) {     let curr = head;      // Find the node with the given key     while (curr !== null) {         if (curr.data === key)             break;         curr = curr.next;     }      // If curr is null or curr.prev is null, there is no     // node to delete     if (curr === null || curr.prev === null)         return head;      // Node to be deleted     let nodeToDelete = curr.prev;      // Update the prev of the current node to the prev of     // the node to be deleted     curr.prev = nodeToDelete.prev;      // If nodeToDelete's prev is not null, update its next     // pointer to the current node     if (nodeToDelete.prev !== null) {         nodeToDelete.prev.next = curr;     }     else {         // If nodeToDelete is the head node         head = curr;     }      return head; }  function printList(head) {     let curr = head;     while (curr !== null) {         console.log(curr.data + " ");         curr = curr.next;     }     console.log(); }  // Create a hardcoded doubly linked list: // 1 <-> 2 <-> 3 <-> 4 let head = new Node(1); head.next = new Node(2); head.next.prev = head; head.next.next = new Node(3); head.next.next.prev = head.next; head.next.next.next = new Node(4); head.next.next.next.prev = head.next.next;  head = deleteBefore(head, 3); printList(head); 

Output
1 3 4  

Time Complexity: O(n), where n is the number of nodes in doubly linked list
Auxiliary Space: O(1)

Deletion at a specific position in Doubly Linked List

Deletion-at-a-Specific-Position-in-Doubly-Linked-List

Delete Node at position 2 in Doubly Linked List

To delete a node at a specific position in doubly linked list, we can use the following steps:

  • Traverse to the node at the specified position, say curr.
  • If the position is valid, adjust the pointers to skip the node to be deleted.
    • If curr is not the head of the linked list, update the next pointer of the node before curr to point to the node after curr, curr->prev->next = curr->next.
    • If curr is not the last node of the linked list, update the previous pointer of the node after curr to the node before curr, curr->next->prev = curr->prev.
  • Free the memory allocated for the deleted node.

Below is the implementation of the above approach:

C++
// C++ Program to delete a node at a specific position // in Doubly Linked List  #include <iostream> using namespace std;  class Node {   public:     int data;     Node *prev;     Node *next;      Node(int d) {         data = d;         prev = nullptr;       	next = nullptr;     } };  // Function to delete a node at a specific position // in the doubly linked list Node *delPos(Node *head, int pos) {        // If the list is empty     if (head == nullptr) {         return head;     }      Node *curr = head;      // Traverse to the node at the given position     for (int i = 1; curr != nullptr && i < pos; ++i) {         curr = curr->next;     }      // If the position is out of range     if (curr == nullptr) {         return head;     }      // Update the previous node's next pointer     if (curr->prev != nullptr) {         curr->prev->next = curr->next;     }      // Update the next node's prev pointer     if (curr->next != nullptr) {         curr->next->prev = curr->prev;     }      // If the node to be deleted is the head node     if (head == curr) {         head = curr->next;     }      // Deallocate memory for the deleted node     delete curr;     return head; }  void printList(Node *head) {     Node *curr = head;     while (curr != nullptr) {         cout << curr->data << " ";         curr = curr->next;     }     cout << endl; }  int main() {        // Create a hardcoded doubly linked list:     // 1 <-> 2 <-> 3     Node *head = new Node(1);     head->next = new Node(2);     head->next->prev = head;     head->next->next = new Node(3);     head->next->next->prev = head->next;      head = delPos(head, 2);     printList(head);      return 0; } 
C
// C Program to delete a node at a specific position // in a doubly linked list   #include <stdio.h> #include <stdlib.h>  struct Node {     int data;     struct Node* prev;     struct Node* next; };  // Function to delete a node at a specific position // in the doubly linked list struct Node* delPos(struct Node* head, int pos) {        // If the list is empty     if (head == NULL) {         return head;     }      struct Node* curr = head;      // Traverse to the node at the given position     for (int i = 1; curr != NULL && i < pos; ++i) {         curr = curr->next;     }      // If the position is out of range     if (curr == NULL) {         return head;     }      // Update the previous node's next pointer     if (curr->prev != NULL) {         curr->prev->next = curr->next;     }      // Update the next node's prev pointer     if (curr->next != NULL) {         curr->next->prev = curr->prev;     }      // If the node to be deleted is the head node     if (head == curr) {         head = curr->next;     }      // Deallocate memory for the deleted node     free(curr);     return head; }  void printList(struct Node* head) {     struct Node* curr = head;     while (curr != NULL) {         printf("%d ", curr->data);         curr = curr->next;     }     printf("\n"); }  struct Node* createNode(int data) {     struct Node* newNode =        (struct Node*)malloc(sizeof(struct Node));     newNode->data = data;     newNode->prev = NULL;     newNode->next = NULL;     return newNode; }  int main() {        // Create a hardcoded doubly linked list: 1 <-> 2 <-> 3     struct Node* head = createNode(1);     head->next = createNode(2);     head->next->prev = head;     head->next->next = createNode(3);     head->next->next->prev = head->next;      head = delPos(head, 2);     printList(head);      return 0; } 
Java
// Java Program to delete node at a specific position  // in Doubly Linked List  class Node {     int data;     Node prev;     Node next;      Node(int d) {         data = d;         prev = null;         next = null;     } }  class GfG {      // Function to delete a node at a      // specific position in the doubly linked list     static Node delPos(Node head, int pos) {          // If the list is empty         if (head == null) {             return head;         }          Node curr = head;          // Traverse to the node at the given position         for (int i = 1; curr != null && i < pos; ++i) {             curr = curr.next;         }          // If the position is out of range         if (curr == null) {             return head;         }          // Update the previous node's next pointer         if (curr.prev != null) {             curr.prev.next = curr.next;         }          // Update the next node's prev pointer         if (curr.next != null) {             curr.next.prev = curr.prev;         }          // If the node to be deleted is the head node         if (head == curr) {             head = curr.next;         }          // Return the updated head         return head;     }      static void printList(Node head) {         Node curr = head;         while (curr != null) {             System.out.print(curr.data + " ");             curr = curr.next;         }         System.out.println();     }      public static void main(String[] args) {          // Create a hardcoded doubly linked list:         // 1 <-> 2 <-> 3         Node head = new Node(1);         head.next = new Node(2);         head.next.prev = head;         head.next.next = new Node(3);         head.next.next.prev = head.next;          head = delPos(head, 2);         printList(head);     } } 
Python
# Python Program to delete node at a specific position # in Doubly Linked List  class Node:     def __init__(self, data):         self.data = data         self.prev = None         self.next = None  # Function to delete a node at a specific position  #in the doubly linked list def del_pos(head, pos):        # If the list is empty     if head is None:         return head      curr = head      # Traverse to the node at the given position     for i in range(1, pos):         if curr is None:             return head         curr = curr.next      # If the position is out of range     if curr is None:         return head      # Update the previous node's next pointer     if curr.prev is not None:         curr.prev.next = curr.next      # Update the next node's prev pointer     if curr.next is not None:         curr.next.prev = curr.prev      # If the node to be deleted is the head node     if head == curr:         head = curr.next      # Return the updated head     return head  def print_list(head):     curr = head     while curr is not None:         print(curr.data, end=" ")         curr = curr.next     print()  if __name__ == "__main__":        # Create a hardcoded doubly linked list:     # 1 <-> 2 <-> 3     head = Node(1)     head.next = Node(2)     head.next.prev = head     head.next.next = Node(3)     head.next.next.prev = head.next      head = del_pos(head, 2)     print_list(head) 
C#
// C# Program to delete node at a specific position // in Doubly Linked List  using System;  class Node {     public int Data;     public Node prev;     public Node next;      public Node(int data) {         Data = data;         prev = null;         next = null;     } }  class GfG {        // Function to delete a node at a specific position     // in the doubly linked list     static Node DelPos(Node head, int pos) {                // If the list is empty         if (head == null)             return head;          Node curr = head;          // Traverse to the node at the given position         for (int i = 1; curr != null && i < pos; ++i) {             curr = curr.next;         }          // If the position is out of range         if (curr == null)             return head;          // Update the previous node's next pointer         if (curr.prev != null)             curr.prev.next = curr.next;          // Update the next node's prev pointer         if (curr.next != null)             curr.next.prev = curr.prev;          // If the node to be deleted is the head node         if (head == curr)             head = curr.next;          // Deallocate memory for the deleted node         // In C#, garbage collection will handle this         // automatically         return head;     }      static void PrintList(Node head) {         Node curr = head;         while (curr != null) {             Console.Write(curr.Data + " ");             curr = curr.next;         }         Console.WriteLine();     }      static void Main() {          // Create a hardcoded doubly linked list:         // 1 <-> 2 <-> 3         Node head = new Node(1);         head.next = new Node(2);         head.next.prev = head;         head.next.next = new Node(3);         head.next.next.prev = head.next;          head = DelPos(head, 2);         PrintList(head);     } } 
JavaScript
// Javascript Program to delete node at a specific position // in Doubly Linked List  class Node {     constructor(data) {         this.data = data;         this.prev = null;         this.next = null;     } }  // Function to delete a node at a specific position // in the doubly linked list function delPos(head, pos) {      // If the list is empty     if (head === null)         return head;      let curr = head;      // Traverse to the node at the given position     for (let i = 1; curr && i < pos; ++i) {         curr = curr.next;     }      // If the position is out of range     if (curr === null)         return head;      // Update the previous node's next pointer     if (curr.prev) {         curr.prev.next = curr.next;     }      // Update the next node's prev pointer     if (curr.next) {         curr.next.prev = curr.prev;     }      // If the node to be deleted is the head node     if (head === curr) {         head = curr.next;     }      // Deallocate memory for the deleted node     // In JavaScript, garbage collection handles     // this automatically      return head; }  function printList(head) {     let curr = head;     let result = [];     while (curr !== null) {         result.push(curr.data);         curr = curr.next;     }     console.log(result.join(" ")); }  // Create a hardcoded doubly linked list: // 1 <-> 2 <-> 3 let head = new Node(1); head.next = new Node(2); head.next.prev = head; head.next.next = new Node(3); head.next.next.prev = head.next;  head = delPos(head, 2); printList(head); 

Output
1 3  

Time Complexity: O(n), where n is the number of nodes in the doubly linked list.
Auxiliary Space: O(1)

Deletion at the End in Doubly Linked List

Deletion-at-the-End-in-Doubly-Linked-List

Deletion at the End of Doubly Linked List

To delete a node at the end in doubly linked list, we can use the following steps:

  • Check if the doubly linked list is empty. If it is empty, then there is nothing to delete.
  • If the list is not empty, then move to the last node of the doubly linked list, say curr.
  • Update the second-to-last node’s next pointer to NULL, curr->prev->next = NULL.
  • Free the memory allocated for the node that was deleted.

Below is the implementation of the above approach: 

C++
// C++ Program to delete a node from the  // end of Doubly Linked List  #include <iostream> using namespace std;  class Node { public:     int data;     Node* prev;     Node* next;      Node(int d) {         data = d;         prev = next = nullptr;     } };  // Function to delete the last node of // the doubly linked list Node* delLast(Node* head) {      if (head == nullptr) {         return nullptr;     }     if (head->next == nullptr) {         delete head;         return nullptr;     }      // Traverse to the last node     Node* curr = head;     while (curr->next != nullptr) {         curr = curr->next;     }      // Update the previous node's next pointer     if (curr->prev != nullptr) {         curr->prev->next = nullptr;     }      // Delete the last node     delete curr;       // Return the updated head     return head; }  void printList(Node* head) {     Node* curr = head;     while (curr != nullptr) {         cout << curr->data << " ";         curr = curr->next;     }     cout << endl; }  int main() {        // Create a hardcoded doubly linked list: 1 <-> 2 <-> 3     Node* head = new Node(1);     head->next = new Node(2);     head->next->prev = head;     head->next->next = new Node(3);     head->next->next->prev = head->next;      head = delLast(head);     printList(head);      return 0; } 
C
// C Program to delete a node from the  // end of Doubly Linked List  #include <stdio.h> #include <stdlib.h>  struct Node {     int data;     struct Node* prev;     struct Node* next; };  // Function to delete the last node  // of the doubly linked list struct Node* delLast(struct Node *head) {        if (head == NULL)         return NULL;     if (head->next == NULL) {         free(head);         return NULL;     }      // Traverse to the last node     struct Node *curr = head;     while (curr->next != NULL)         curr = curr->next;      // Update the previous node's next pointer     curr->prev->next = NULL;      // Delete the last node     free(curr);      // Return the updated head     return head; }  void printList(struct Node *head) {     struct Node *curr = head;     while (curr != NULL) {         printf("%d ", curr->data);         curr = curr->next;     }     printf("\n"); }   struct Node* createNode(int data) {     struct Node *newNode =        (struct Node*)malloc(sizeof(struct Node));     newNode->data = data;     newNode->prev = NULL;     newNode->next = NULL;     return newNode; }  int main() {        // Create a hardcoded doubly linked list:     // 1 <-> 2 <-> 3     struct Node *head = createNode(1);     head->next = createNode(2);     head->next->prev = head;     head->next->next = createNode(3);     head->next->next->prev = head->next;      head = delLast(head);     printList(head);      return 0; } 
Java
// Java Program to delete a node from the  // end of Doubly Linked List  class Node {     int data;     Node prev;     Node next;      Node(int d) {         data = d;         prev = null;         next = null;     } }  public class GfG {        // Function to delete the last node    	// of the doubly linked list     static Node delLast(Node head) {                if (head == null) {             return null;         }         if (head.next == null) {             return null;         }          // Traverse to the last node         Node curr = head;         while (curr.next != null) {             curr = curr.next;         }          // Update the previous node's next pointer         if (curr.prev != null) {             curr.prev.next = null;         }          // Return the updated head         return head;     }      static void printList(Node head) {         Node curr = head;         while (curr != null) {             System.out.print(curr.data + " ");             curr = curr.next;         }         System.out.println();     }      public static void main(String[] args) {                // Create a hardcoded doubly linked list:         // 1 <-> 2 <-> 3         Node head = new Node(1);         head.next = new Node(2);         head.next.prev = head;         head.next.next = new Node(3);         head.next.next.prev = head.next;          head = delLast(head);          printList(head);     } } 
Python
# Python Program to delete a node from  # the end of Doubly Linked List  class Node:     def __init__(self, data):         self.data = data         self.prev = None         self.next = None  def del_last(head):        if head is None:         return None     if head.next is None:         return None      # Traverse to the last node     curr = head     while curr.next is not None:         curr = curr.next      # Update the previous node's next pointer     if curr.prev is not None:         curr.prev.next = None      # Return the updated head     return head  def print_list(head):     curr = head     while curr is not None:         print(curr.data, end=" ")         curr = curr.next     print()  if __name__ == "__main__":        # Create a hardcoded doubly linked list:     # 1 <-> 2 <-> 3     head = Node(1)     head.next = Node(2)     head.next.prev = head     head.next.next = Node(3)     head.next.next.prev = head.next          head = del_last(head)     print_list(head) 
C#
// C# Program to delete a node from the // end of Doubly Linked List  using System;  class Node {     public int Data;     public Node prev;     public Node next;      public Node(int data) {         Data = data;         prev = null;         next = null;     } }  class GfG {      // Function to delete the last node of the doubly linked     // list     static Node DelLast(Node head) {          if (head == null)             return null;         if (head.next == null) {             return null;         }          // Traverse to the last node         Node curr = head;         while (curr.next != null)             curr = curr.next;          // Update the previous node's next pointer         if (curr.prev != null)             curr.prev.next = null;          // Delete the last node         curr = null;          // Return the updated head         return head;     }      static void PrintList(Node head) {         Node curr = head;         while (curr != null) {             Console.Write(curr.Data + " ");             curr = curr.next;         }         Console.WriteLine();     }      static void Main() {          // Create a hardcoded doubly linked list:         // 1 <-> 2 <-> 3         Node head = new Node(1);         head.next = new Node(2);         head.next.prev = head;         head.next.next = new Node(3);         head.next.next.prev = head.next;          head = DelLast(head);         PrintList(head);     } } 
JavaScript
// JavaScript Program to delete a node from // the end of Doubly Linked List  class Node {     constructor(data) {         this.data = data;         this.prev = null;         this.next = null;     } }  // Function to delete the last node of the doubly linked // list function delLast(head) {     if (head === null)         return null;     if (head.next === null) {         // Only one node in the list         return null;     }      // Traverse to the last node     let curr = head;     while (curr.next !== null) {         curr = curr.next;     }      // Update the previous node's next pointer     if (curr.prev !== null) {         curr.prev.next = null;     }      return head; }  function printList(head) {     let curr = head;     while (curr !== null) {         console.log(curr.data + " ");         curr = curr.next;     } }  // Create a hardcoded doubly linked list: // 1 <-> 2 <-> 3 let head = new Node(1); head.next = new Node(2); head.next.prev = head; head.next.next = new Node(3); head.next.next.prev = head.next;  head = delLast(head); printList(head); 

Output
1 2  

Time Complexity: O(n), where n is the number of nodes in the doubly linked list.
Auxiliary Space: O(1)



Next Article
Delete a Doubly Linked List node at a given position
author
kartik
Improve
Article Tags :
  • DSA
  • Linked List
  • Amazon
  • doubly linked list
Practice Tags :
  • Amazon
  • 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. Characteristics of the Doubly Linked List: The characteristics of a doubly linked list are as follows: Dynamic size: The size of a doubly linked
    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
    9 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.  Introduct
    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 Content Insertion
      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:
      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.
      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<->3 Input: 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