{"id":3646,"date":"2021-08-06T11:54:09","date_gmt":"2021-08-06T11:54:09","guid":{"rendered":"https:\/\/www.prepbytes.com\/blog\/?p=3646"},"modified":"2022-11-16T11:25:37","modified_gmt":"2022-11-16T11:25:37","slug":"insertion-sort-for-doubly-linked-list","status":"publish","type":"post","link":"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/","title":{"rendered":"Insertion Sort for Doubly Linked List"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1644911266286-Insertion%20sort%20for%20doubly%20linked%20list-05.png\" alt=\"\" \/><\/p>\n<p>In the respective article, we will look how stable sorting such as insertion sort works in doubly linked lists. Now let&#8217;s just see an approach of insertion sort for doubly linked list. <\/p>\n<h3>Problem Statement of doubly linked list insertion sort<\/h3>\n<p>In this question, we are given a doubly linked list. We have to sort the given list using the insertion sort technique.<\/p>\n<p><strong>Input:<\/strong><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/prepbytes.com\/blog\/wp-content\/uploads\/2021\/08\/46_2-01.png\" alt=\"\" \/><\/p>\n<p><strong>Output:<\/strong> <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/prepbytes.com\/blog\/wp-content\/uploads\/2021\/08\/46_1-01.png\" alt=\"\" \/><\/p>\n<p><strong>Explanation:<\/strong> The given list has been sorted.<\/p>\n<p>This question is not a tricky one. We just have to extract the elements from the list one by one, and insert them in the new list in a sorted way. This sorted insert technique has been explained in detail in the approach.<\/p>\n<p>Let us have a glance at the approach.<\/p>\n<h3>Approach of insertion sort for doubly linked list<\/h3>\n<p>The approach is going to be pretty simple. We will create an empty result doubly linked list which will be sorted. Then, we will traverse the given doubly linked list, and for every node that we visit, we will insert the current node in a sorted way in our result list.<\/p>\n<p>To insert in a sorted way, we will traverse our result list and keep comparing every node with our current node. As soon as we find a node whose value is greater than the current node, we will insert the current node just before that node. If the current node value is greater than every other node of our result list, then we will append the current node at the end.<\/p>\n<p>After complete traversal, change the head of the given linked list to the head of the result list.<\/p>\n<h3>Algorithm of doubly linked list insertion sort<\/h3>\n<ul>\n<li>Initialize the newly created sorted list as NULL.<\/li>\n<li>Traverse the given doubly linked list.<\/li>\n<li>For every node, store the next of node in a temp variable and remove all of its links.<\/li>\n<li>Insert the current node in a sorted way in the result list.<\/li>\n<li>To insert in a sorted way, traverse through the result list and keep comparing every node with our current node. As soon as a node is found whose value is greater than the current node, we will insert the current node just before that node. If the current node value is greater than every node of the result list, then append the current node at the end of the result list.<\/li>\n<li>Update current\u2019s value with temp.<\/li>\n<li>Update the head pointer by making it point to our result list.<\/li>\n<\/ul>\n<h3>Dry Run of insertion sort for doubly linked list<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/prepbytes.com\/blog\/wp-content\/uploads\/2021\/08\/46_3-01.png\" alt=\"\" \/><\/p>\n<h3>Code Implementation of doubly linked list insertion sort<\/h3>\n\t\t\t\t\t\t<style>\r\n\t\t\t\t\r\n\t\t\t\t\t#tab_container_3647 {\r\n\toverflow:hidden;\r\n\tdisplay:block;\r\n\twidth:100%;\r\n\tborder:0px solid #ddd;\r\n\tmargin-bottom:30px;\r\n\t}\r\n\r\n#tab_container_3647 .tab-content{\r\n\tpadding:20px;\r\n\tborder: 1px solid #e6e6e6 !important;\r\n\tmargin-top: 0px;\r\n\tbackground-color:#ffffff !important;\r\n\tcolor: #000000 !important;\r\n\tfont-size:16px !important;\r\n\tfont-family: Open Sans !important;\r\n\t\r\n\t\tborder: 1px solid #e6e6e6 !important;\r\n\t}\r\n#tab_container_3647 .wpsm_nav-tabs {\r\n    border-bottom: 0px solid #ddd;\r\n}\r\n#tab_container_3647 .wpsm_nav-tabs > li.active > a, #tab_container_3647 .wpsm_nav-tabs > li.active > a:hover, #tab_container_3647 .wpsm_nav-tabs > li.active > a:focus {\r\n\tcolor: #000000 !important;\r\n\tcursor: default;\r\n\tbackground-color: #ffffff !important;\r\n\tborder: 1px solid #e6e6e6 !important;\r\n}\r\n\r\n#tab_container_3647 .wpsm_nav-tabs > li > a {\r\n    margin-right: 0px !important; \r\n    line-height: 1.42857143 !important;\r\n    border: 1px solid #d5d5d5 !important;\r\n    border-radius: 0px 0px 0 0 !important; \r\n\tbackground-color: #e8e8e8 !important;\r\n\tcolor: #000000 !important;\r\n\tpadding: 15px 18px 15px 18px !important;\r\n\ttext-decoration: none !important;\r\n\tfont-size: 14px !important;\r\n\ttext-align:center !important;\r\n\tfont-family: Open Sans !important;\r\n}\r\n#tab_container_3647 .wpsm_nav-tabs > li > a:focus {\r\noutline: 0px !important;\r\n}\r\n\r\n#tab_container_3647 .wpsm_nav-tabs > li > a:before {\r\n\tdisplay:none !important;\r\n}\r\n#tab_container_3647 .wpsm_nav-tabs > li > a:after {\r\n\tdisplay:none !important ;\r\n}\r\n#tab_container_3647 .wpsm_nav-tabs > li{\r\npadding:0px !important ;\r\nmargin:0px;\r\n}\r\n\r\n#tab_container_3647 .wpsm_nav-tabs > li > a:hover , #tab_container_3647 .wpsm_nav-tabs > li > a:focus {\r\n    color: #000000 !important;\r\n    background-color: #e8e8e8 !important;\r\n\tborder: 1px solid #d5d5d5 !important;\r\n\t\r\n}\r\n#tab_container_3647 .wpsm_nav-tabs > li > a .fa{\r\n\r\nmargin-right:5px !important;\r\n\r\nmargin-left:5px !important;\r\n\r\n\r\n}\r\n\r\n\t\t#tab_container_3647 .wpsm_nav-tabs a{\r\n\t\t\tbackground-image: none;\r\n\t\t\tbackground-position: 0 0;\r\n\t\t\tbackground-repeat: repeat-x;\r\n\t\t}\r\n\t\t\t\r\n\r\n\r\n#tab_container_3647 .wpsm_nav-tabs > li {\r\n    float: left;\r\n    margin-bottom: -1px !important;\r\n\tmargin-right:0px !important; \r\n}\r\n\r\n\r\n#tab_container_3647 .tab-content{\r\noverflow:hidden !important;\r\n}\r\n\r\n\r\n@media (min-width: 769px) {\r\n\r\n\t#tab_container_3647 .wpsm_nav-tabs > li{\r\n\t\tfloat:left !important ;\r\n\t\t\t\tmargin-right:-1px !important;\r\n\t\t\t\t\t}\r\n\t#tab_container_3647 .wpsm_nav-tabs{\r\n\t\tfloat:none !important;\r\n\t\tmargin:0px !important;\r\n\t}\r\n\r\n\t#tab_container_3647 .wpsm_nav-tabs > li {\r\n\t\t\t\t\r\n\t}\r\n\t#tab_container_3647 .wpsm_nav{\r\n\t\t\t}\r\n\r\n}\r\n\r\n\r\n\r\n@media (max-width: 768px) {\r\n\t#tab_container_3647 .wpsm_nav-tabs > li {\r\n\t\t\t\t\r\n\t}\r\n\t#tab_container_3647 .wpsm_nav{\r\n\t\t\t}\r\n}\r\n\r\n\r\n\t.wpsm_nav-tabs li:before{\r\n\t\tdisplay:none !important;\r\n\t}\r\n\r\n\t@media (max-width: 768px) {\r\n\t\t\t\t\r\n\t\t\t\t.wpsm_nav-tabs{\r\n\t\t\tmargin-left:0px !important;\r\n\t\t\tmargin-right:0px !important; \r\n\t\t\t\r\n\t\t}\r\n\t\t\t\t#tab_container_3647 .wpsm_nav-tabs > li{\r\n\t\t\tfloat:none !important;\r\n\t\t}\r\n\t\t\t\r\n\t}\t\t\t\t<\/style>\r\n\t\t\t\t<div id=\"tab_container_3647\" >\r\n\t \r\n\t\t\t\t\t<ul class=\"wpsm_nav wpsm_nav-tabs\" role=\"tablist\" id=\"myTab_3647\">\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  class=\"active\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_3647_1\" aria-controls=\"tabs_desc_3647_1\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>C++<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_3647_2\" aria-controls=\"tabs_desc_3647_2\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>Java<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\t\t\t\t <\/ul>\r\n\r\n\t\t\t\t\t  <!-- Tab panes -->\r\n\t\t\t\t\t  <div class=\"tab-content\" id=\"tab-content_3647\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane  in active \" id=\"tabs_desc_3647_1\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"cpp\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\n#include <bits\/stdc++.h>\r\n \r\nusing namespace std;\r\n\r\nstruct Node {\r\n    int data;\r\n    struct Node* prev, *next;\r\n};\r\n\r\nstruct Node* getNode(int data)\r\n{\r\n    struct Node* newNode =\r\n          (struct Node*)malloc(sizeof(struct Node));\r\n\r\n    newNode->data = data;\r\n    newNode->prev = newNode->next = NULL;\r\n    return newNode;\r\n}\r\n \r\n\/\/ Function to insert in a sorted way\r\nvoid sortedInsert(struct Node** head_ref, struct Node* newNode)\r\n{\r\n    struct Node* current;\r\n \r\n    \/\/ if the list is empty\r\n    if (*head_ref == NULL)\r\n        *head_ref = newNode;\r\n \r\n    \/\/ if the node is to be inserted at the start\r\n    \/\/ of the sorted doubly linked list\r\n    else if ((*head_ref)->data >= newNode->data) {\r\n        newNode->next = *head_ref;\r\n        newNode->next->prev = newNode;\r\n        *head_ref = newNode;\r\n    }\r\n \r\n    else {\r\n        current = *head_ref;\r\n \r\n        \/\/ find the node after which the new node\r\n        \/\/ is to be inserted\r\n        while (current->next != NULL &&\r\n               current->next->data < newNode->data)\r\n            current = current->next;\r\n \r\n        \/*Make the appropriate links *\/\r\n \r\n        newNode->next = current->next;\r\n \r\n        \/\/ if the new node is not inserted at the\r\n        \/\/ end of the sorted doubly linked list\r\n        if (current->next != NULL)\r\n            newNode->next->prev = newNode;\r\n \r\n        current->next = newNode;\r\n        newNode->prev = current;\r\n    }\r\n}\r\n \r\n\/\/ Function to sort the doubly linked list\r\n\/\/ using insertion sort\r\nvoid insertionSort(struct Node** head_ref)\r\n{\r\n    \/\/ Initialize sorted doubly linked list with NULL\r\n    struct Node* sorted = NULL;\r\n \r\n    \/\/ Traverse through the given list\r\n    struct Node* current = *head_ref;\r\n    while (current != NULL) {\r\n \r\n        \/\/ Store next for next iteration\r\n        struct Node* next = current->next;\r\n \r\n        \/\/ Rremovee all the links\r\n        current->prev = current->next = NULL;\r\n \r\n        \/\/ insert current in the 'sorted' doubly linked list\r\n        sortedInsert(&sorted, current);\r\n \r\n        \/\/ Update current\r\n        current = next;\r\n    }\r\n \r\n    \/\/ Update the head\r\n    *head_ref = sorted;\r\n}\r\n\r\nvoid printList(struct Node* head)\r\n{\r\n    while (head != NULL) {\r\n        cout << head->data << \" \";\r\n        head = head->next;\r\n    }\r\n}\r\n\r\nvoid push(struct Node** head_ref, int new_data)\r\n{\r\n    struct Node* new_node =\r\n         (struct Node*)malloc(sizeof(struct Node));\r\n\r\n    new_node->data = new_data;\r\n\r\n    new_node->next = (*head_ref);\r\n    new_node->prev = NULL;\r\n\r\n    if ((*head_ref) != NULL)\r\n        (*head_ref)->prev = new_node;\r\n\r\n    (*head_ref) = new_node;\r\n}\r\n\r\nint main()\r\n{\r\n    struct Node* head = NULL;\r\n    push(&head, 2);\r\n    push(&head, 1);\r\n    push(&head, 3);\r\n    cout << \"Doubly Linked List Before Sorting &#92;n\";\r\n    printList(head);\r\n    insertionSort(&head);\r\n    cout << \"&#92;n Doubly Linked List After Sorting &#92;n\";\r\n    printList(head);\r\n \r\n    return 0;\r\n}\r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\r\n\r\n\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane \" id=\"tabs_desc_3647_2\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"java\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\npublic class Solution\r\n{\r\nstatic class Node\r\n{\r\n    int data;\r\n    Node prev, next;\r\n};\r\n\r\nstatic Node getNode(int data)\r\n{\r\n\r\n    Node newNode = new Node();\r\n\r\n\r\n    newNode.data = data;\r\n    newNode.prev = newNode.next = null;\r\n    return newNode;\r\n}\r\n\r\nstatic Node sortedInsert(Node head_ref, Node newNode)\r\n{\r\n    Node current;\r\n\r\n\r\n    if (head_ref == null)\r\n        head_ref = newNode;\r\n\r\n\r\n    else if ((head_ref).data >= newNode.data)\r\n    {\r\n        newNode.next = head_ref;\r\n        newNode.next.prev = newNode;\r\n        head_ref = newNode;\r\n    }\r\n\r\n    else\r\n    {\r\n        current = head_ref;\r\n\r\n\r\n        while (current.next != null &&\r\n            current.next.data < newNode.data)\r\n            current = current.next;\r\n\r\n        newNode.next = current.next;\r\n\r\n\r\n        if (current.next != null)\r\n            newNode.next.prev = newNode;\r\n\r\n        current.next = newNode;\r\n        newNode.prev = current;\r\n    }\r\n    return head_ref;\r\n}\r\n\r\nstatic Node insertionSort(Node head_ref)\r\n{\r\n\r\n    Node sorted = null;\r\n\r\n    Node current = head_ref;\r\n    while (current != null)\r\n    {\r\n\r\n        Node next = current.next;\r\n\r\n        current.prev = current.next = null;\r\n\r\n\r\n        sorted=sortedInsert(sorted, current);\r\n\r\n\r\n        current = next;\r\n    }\r\n\r\n    head_ref = sorted;\r\n    \r\n    return head_ref;\r\n}\r\n\r\nstatic void printList(Node head)\r\n{\r\n    while (head != null)\r\n    {\r\n        System.out.print(head.data + \" \");\r\n        head = head.next;\r\n    }\r\n}\r\n\r\nstatic Node push(Node head_ref, int new_data)\r\n{\r\n\r\n    Node new_node = new Node();\r\n\r\n\r\n    new_node.data = new_data;\r\n\r\n\r\n    new_node.next = (head_ref);\r\n    new_node.prev = null;\r\n\r\n    if ((head_ref) != null)\r\n        (head_ref).prev = new_node;\r\n\r\n\r\n    (head_ref) = new_node;\r\n    \r\n    return head_ref;\r\n}\r\n\r\npublic static void main(String args[])\r\n{\r\n    Node head = null;\r\n    head=push(head, 2);\r\n    head=push(head, 1);\r\n    head=push(head, 3);\r\n    System.out.println( \"Doubly Linked List Before Sorting&#92;n\");\r\n    printList(head);\r\n    head=insertionSort(head);\r\n    System.out.println(\"&#92;nDoubly Linked List After Sorting&#92;n\");\r\n    printList(head);\r\n}\r\n}\r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\r\n\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t <\/div>\r\n\t\t\t\t\t \r\n\t\t\t\t <\/div>\r\n <script>\r\n\t\tjQuery(function () {\r\n\t\t\tjQuery('#myTab_3647 a:first').tab('show')\r\n\t\t});\r\n\t\t\r\n\t\t\t\tjQuery(function(){\r\n\t\t\tvar b=\"fadeIn\";\r\n\t\t\tvar c;\r\n\t\t\tvar a;\r\n\t\t\td(jQuery(\"#myTab_3647 a\"),jQuery(\"#tab-content_3647\"));function d(e,f,g){\r\n\t\t\t\te.click(function(i){\r\n\t\t\t\t\ti.preventDefault();\r\n\t\t\t\t\tjQuery(this).tab(\"show\");\r\n\t\t\t\t\tvar h=jQuery(this).data(\"easein\");\r\n\t\t\t\t\tif(c){c.removeClass(a);}\r\n\t\t\t\t\tif(h){f.find(\"div.active\").addClass(\"animated \"+h);a=h;}\r\n\t\t\t\t\telse{if(g){f.find(\"div.active\").addClass(\"animated \"+g);a=g;}else{f.find(\"div.active\").addClass(\"animated \"+b);a=b;}}c=f.find(\"div.active\");\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\r\n\t\tfunction do_resize(){\r\n\r\n\t\t\tvar width=jQuery( '.tab-content .tab-pane iframe' ).width();\r\n\t\t\tvar height=jQuery( '.tab-content .tab-pane iframe' ).height();\r\n\r\n\t\t\tvar toggleSize = true;\r\n\t\t\tjQuery('iframe').animate({\r\n\t\t\t    width: toggleSize ? width : 640,\r\n\t\t\t    height: toggleSize ? height : 360\r\n\t\t\t  }, 250);\r\n\r\n\t\t\t  toggleSize = !toggleSize;\r\n\t\t}\r\n\r\n\r\n\t<\/script>\r\n\t\t\t\t\r\n\t\t\t\n<h4>Output<\/h4>\n<p><strong>Doubly Linked List Before Sorting<\/strong><\/p>\n<p>2 1 3<\/p>\n<p><strong>Doubly Linked List After Sorting<\/strong><\/p>\n<p>1 2 3<\/p>\n<p><strong>Time Complexity of doubly linked list insertion sort:<\/strong> O(n<sup>2<\/sup>), as we are using nested traversal.<\/p>\n<h3> Conclusion <\/h3>\n<p>So, in this article, we have tried to explain the most efficient approach of Insertion sort for doubly linked list. Insertion sort is an important technique, and when it gets coupled with a doubly linked list, it becomes even more important. If you want to solve more questions on Linked List, which are curated by our expert mentors at PrepBytes, you can follow this link <a href=\"https:\/\/mycode.prepbytes.com\/interview-coding\/practice\/linked-list\">Linked List<\/a>.<\/p>\n<table width=\"641\">\n<tbody>\n<tr>\n<td colspan=\"2\" width=\"641\" style=\"text-align: center\"><strong>Related Articles<\/strong><\/td>\n<\/tr>\n<tr>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/doubly-circular-linked-list-introduction-and-insertion\/\">Doubly circular linked list in data structure<\/a><\/td>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/advantages-disadvantages-and-uses-of-a-doubly-linked-list\/\">Application of doubly linked list<\/a><\/td>\n<\/tr>\n<tr>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/applications-of-linked-list-data-structure\/\">Applications of linked list<\/a><\/td>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/difference-between-a-singly-linked-list-and-a-doubly-linked-list\/\">Singly linked list vs doubly linked list<\/a><\/td>\n<\/tr>\n<tr>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/advantage-and-disadvantage-of-linked-list-over-array\/\">Advantages and disadvantages of linked list<\/a><\/td>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/menu-driven-program-for-all-operations-on-doubly-linked-list-in-c\/\">Doubly linked list all operations in C<\/a><\/td>\n<\/tr>\n<tr>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/binary-search\/binary-search-on-linked-list\/\">Binary search in linked list<\/a><\/td>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/bubble-sort-for-linked-list-by-swapping-nodes\/\">Bubble sort linked list<\/a><\/td>\n<\/tr>\n<tr>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/delete-a-node-in-doubly-linked-list\/\">Deletion in doubly linked list<\/a><\/td>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/delete-middle-of-linked-list\/\">Delete the middle node of a linked list<\/a><\/td>\n<\/tr>\n<tr>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/adding-two-polynomials-using-linked-list\/\">Polynomial addition using linked list<\/a><\/td>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/find-the-smallest-and-largest-elements-in-a-singly-linked-list\/\">Find max value and min value in linked list<\/a><\/td>\n<\/tr>\n<tr>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/insert-a-node-at-a-specific-position-in-a-linked-list\/\">Insert a node at a specific position in a linked list<\/a><\/td>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/swap-nodes-in-a-linked-list-without-swapping-data\/\">Swap nodes in linked list<\/a><\/td>\n<\/tr>\n<tr>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/add-two-numbers-represented-by-linked-lists-set-1\/\">Add two numbers represented by linked lists<\/a><\/td>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/find-the-first-node-of-the-loop-in-a-linked-list\/\">Find starting point of loop in linked list<\/a><\/td>\n<\/tr>\n<tr>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/merge-sort-on-a-singly-linked-list\/\">Merge sort linked list<\/a><\/td>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/delete-a-node-at-a-given-position\/\">Delete a node from linked list at a given position<\/a><\/td>\n<\/tr>\n<tr>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/linked-list\/remove-duplicates-from-an-unsorted-linked-list\/\">Remove duplicates from unsorted linked list<\/a><\/td>\n<td width=\"321\"><a href=\"https:\/\/prepbytes.com\/blog\/python\/python-program-to-reverse-a-linked-list\/\">Reverse a linked list in Python<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2> FAQs of insertion sort for doubly linked list <\/h2>\n<ol>\n<li><strong>Why insertion sort is called a stable sorting? <\/strong><\/li>\n<p>Because in insertion sort for doubly linked list two equivalent items will always be preserved.<\/p>\n<li><strong>Why is doubly linked list is preferred than singly linked list?<\/strong><\/li>\n<p>As doubly linked list is also a two way list, so the implementation of doubly linked list is way more easier than a singly linked list.<\/p>\n<li><strong>What is the time complexity of doubly linked list?<\/strong><\/li>\n<p>The time complexity of doubly linked list is O(1).<\/ol><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the respective article, we will look how stable sorting such as insertion sort works in doubly linked lists. Now let&#8217;s just see an approach of insertion sort for doubly linked list. Problem Statement of doubly linked list insertion sort In this question, we are given a doubly linked list. We have to sort the [&hellip;]<\/p>\n","protected":false},"author":52,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[125],"tags":[],"class_list":["post-3646","post","type-post","status-publish","format-standard","hentry","category-linked-list"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Learn to implement Insertion Sort technique for Doubly Linked List<\/title>\n<meta name=\"description\" content=\"This blog explains the most efficient approach to sort a doubly-linked list using the insertion sort technique.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Learn to implement Insertion Sort technique for Doubly Linked List\" \/>\n<meta property=\"og:description\" content=\"This blog explains the most efficient approach to sort a doubly-linked list using the insertion sort technique.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/\" \/>\n<meta property=\"og:site_name\" content=\"PrepBytes Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prepbytes0211\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-08-06T11:54:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-16T11:25:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1644911266286-Insertion%20sort%20for%20doubly%20linked%20list-05.png\" \/>\n<meta name=\"author\" content=\"Prepbytes\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Prepbytes\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/\"},\"author\":{\"name\":\"Prepbytes\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e\"},\"headline\":\"Insertion Sort for Doubly Linked List\",\"datePublished\":\"2021-08-06T11:54:09+00:00\",\"dateModified\":\"2022-11-16T11:25:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/\"},\"wordCount\":749,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/43.205.93.38\/#organization\"},\"image\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1644911266286-Insertion%20sort%20for%20doubly%20linked%20list-05.png\",\"articleSection\":[\"Linked list articles\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/\",\"url\":\"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/\",\"name\":\"Learn to implement Insertion Sort technique for Doubly Linked List\",\"isPartOf\":{\"@id\":\"http:\/\/43.205.93.38\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1644911266286-Insertion%20sort%20for%20doubly%20linked%20list-05.png\",\"datePublished\":\"2021-08-06T11:54:09+00:00\",\"dateModified\":\"2022-11-16T11:25:37+00:00\",\"description\":\"This blog explains the most efficient approach to sort a doubly-linked list using the insertion sort technique.\",\"breadcrumb\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/#primaryimage\",\"url\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1644911266286-Insertion%20sort%20for%20doubly%20linked%20list-05.png\",\"contentUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1644911266286-Insertion%20sort%20for%20doubly%20linked%20list-05.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\/\/43.205.93.38\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Linked list articles\",\"item\":\"https:\/\/prepbytes.com\/blog\/category\/linked-list\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Insertion Sort for Doubly Linked List\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/43.205.93.38\/#website\",\"url\":\"http:\/\/43.205.93.38\/\",\"name\":\"PrepBytes Blog\",\"description\":\"ONE-STOP RESOURCE FOR EVERYTHING RELATED TO CODING\",\"publisher\":{\"@id\":\"http:\/\/43.205.93.38\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/43.205.93.38\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"http:\/\/43.205.93.38\/#organization\",\"name\":\"Prepbytes\",\"url\":\"http:\/\/43.205.93.38\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp\",\"contentUrl\":\"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp\",\"width\":160,\"height\":160,\"caption\":\"Prepbytes\"},\"image\":{\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/prepbytes0211\/\",\"https:\/\/www.instagram.com\/prepbytes\/\",\"https:\/\/www.linkedin.com\/company\/prepbytes\/\",\"https:\/\/www.youtube.com\/channel\/UC0xGnHDrjUM1pDEK2Ka5imA\"]},{\"@type\":\"Person\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e\",\"name\":\"Prepbytes\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g\",\"caption\":\"Prepbytes\"},\"url\":\"https:\/\/prepbytes.com\/blog\/author\/gourav-jaincollegedekho-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Learn to implement Insertion Sort technique for Doubly Linked List","description":"This blog explains the most efficient approach to sort a doubly-linked list using the insertion sort technique.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/","og_locale":"en_US","og_type":"article","og_title":"Learn to implement Insertion Sort technique for Doubly Linked List","og_description":"This blog explains the most efficient approach to sort a doubly-linked list using the insertion sort technique.","og_url":"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/","og_site_name":"PrepBytes Blog","article_publisher":"https:\/\/www.facebook.com\/prepbytes0211\/","article_published_time":"2021-08-06T11:54:09+00:00","article_modified_time":"2022-11-16T11:25:37+00:00","og_image":[{"url":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1644911266286-Insertion%20sort%20for%20doubly%20linked%20list-05.png","type":"","width":"","height":""}],"author":"Prepbytes","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Prepbytes","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/#article","isPartOf":{"@id":"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/"},"author":{"name":"Prepbytes","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e"},"headline":"Insertion Sort for Doubly Linked List","datePublished":"2021-08-06T11:54:09+00:00","dateModified":"2022-11-16T11:25:37+00:00","mainEntityOfPage":{"@id":"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/"},"wordCount":749,"commentCount":0,"publisher":{"@id":"http:\/\/43.205.93.38\/#organization"},"image":{"@id":"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/#primaryimage"},"thumbnailUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1644911266286-Insertion%20sort%20for%20doubly%20linked%20list-05.png","articleSection":["Linked list articles"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/","url":"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/","name":"Learn to implement Insertion Sort technique for Doubly Linked List","isPartOf":{"@id":"http:\/\/43.205.93.38\/#website"},"primaryImageOfPage":{"@id":"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/#primaryimage"},"image":{"@id":"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/#primaryimage"},"thumbnailUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1644911266286-Insertion%20sort%20for%20doubly%20linked%20list-05.png","datePublished":"2021-08-06T11:54:09+00:00","dateModified":"2022-11-16T11:25:37+00:00","description":"This blog explains the most efficient approach to sort a doubly-linked list using the insertion sort technique.","breadcrumb":{"@id":"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/#primaryimage","url":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1644911266286-Insertion%20sort%20for%20doubly%20linked%20list-05.png","contentUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1644911266286-Insertion%20sort%20for%20doubly%20linked%20list-05.png"},{"@type":"BreadcrumbList","@id":"https:\/\/prepbytes.com\/blog\/insertion-sort-for-doubly-linked-list\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/43.205.93.38\/"},{"@type":"ListItem","position":2,"name":"Linked list articles","item":"https:\/\/prepbytes.com\/blog\/category\/linked-list\/"},{"@type":"ListItem","position":3,"name":"Insertion Sort for Doubly Linked List"}]},{"@type":"WebSite","@id":"http:\/\/43.205.93.38\/#website","url":"http:\/\/43.205.93.38\/","name":"PrepBytes Blog","description":"ONE-STOP RESOURCE FOR EVERYTHING RELATED TO CODING","publisher":{"@id":"http:\/\/43.205.93.38\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/43.205.93.38\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"http:\/\/43.205.93.38\/#organization","name":"Prepbytes","url":"http:\/\/43.205.93.38\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/","url":"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp","contentUrl":"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp","width":160,"height":160,"caption":"Prepbytes"},"image":{"@id":"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/prepbytes0211\/","https:\/\/www.instagram.com\/prepbytes\/","https:\/\/www.linkedin.com\/company\/prepbytes\/","https:\/\/www.youtube.com\/channel\/UC0xGnHDrjUM1pDEK2Ka5imA"]},{"@type":"Person","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e","name":"Prepbytes","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g","caption":"Prepbytes"},"url":"https:\/\/prepbytes.com\/blog\/author\/gourav-jaincollegedekho-com\/"}]}},"_links":{"self":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/3646","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/comments?post=3646"}],"version-history":[{"count":7,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/3646\/revisions"}],"predecessor-version":[{"id":10513,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/3646\/revisions\/10513"}],"wp:attachment":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/media?parent=3646"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/categories?post=3646"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/tags?post=3646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}