Open In App

Javascript Program To Delete Middle Of Linked List

Improve
Improve
Like Article
Like
Save
Share
Report

Given a singly linked list, delete the middle of the linked list. For example, if the given linked list is 1->2->3->4->5 then the linked list should be modified to 1->2->4->5

If there are even nodes, then there would be two middle nodes, we need to delete the second middle element. For example, if given linked list is 1->2->3->4->5->6 then it should be modified to 1->2->3->5->6.
If the input linked list is NULL, then it should remain NULL.

If the input linked list has 1 node, then this node should be deleted and a new head should be returned. 

Efficient solution: 
Approach: The above solution requires two traversals of the linked list. The middle node can be deleted using one traversal. The idea is to use two pointers, slow_ptr, and fast_ptr. Both pointers start from the head of list. When fast_ptr reaches the end, slow_ptr reaches middle. This idea is same as the one used in method 2 of this post. The additional thing in this post is to keep track of the previous middle so the middle node can be deleted.

Below is the implementation.  

Javascript




<script>
// Javascript program to delete the 
// middle of a linked list
// Link list Node 
class Node 
{
    constructor() 
    {
        this.data = 0;
        this.next = null;
    }
}
   
// Deletes middle node and returns
// head of the modified list
function deleteMid( head) 
{
    // Base cases
    if (head == null)
        return null;
    if (head.next == null
    {
        return null;
    }
  
    // Initialize slow and fast pointers
    // to reach middle of linked list
    var slow_ptr = head;
    var fast_ptr = head;
  
    // Find the middle and previous of 
    // middle.
    var prev = null;
  
    // To store previous of slow_ptr
    while (fast_ptr != null && 
           fast_ptr.next != null
    {
        fast_ptr = fast_ptr.next.next;
        prev = slow_ptr;
        slow_ptr = slow_ptr.next;
    }
  
    // Delete the middle node
    prev.next = slow_ptr.next;
  
    return head;
}
  
// A utility function to print
// a given linked list
function printList(ptr) 
{
    while (ptr != null
    {
        document.write(ptr.data + "->");
        ptr = ptr.next;
    }
    document.write("NULL<br/>");
}
  
// Utility function to create a 
// new node.
function newNode(data) 
{
    temp = new Node();
    temp.data = data;
    temp.next = null;
    return temp;
}
  
// Driver code 
// Start with the empty list 
head = newNode(1);
head.next = newNode(2);
head.next.next = newNode(3);
head.next.next.next = newNode(4);
document.write("Given Linked List<br/>");
printList(head);
head = deleteMid(head);
document.write(
         "Linked List after deletion of middle<br/>");
printList(head);
// This code is contributed by umadevi9616 
</script>


Output:

Given Linked List
1->2->3->4->NULL
Linked List after deletion of middle
1->2->4->NULL

Complexity Analysis: 

  • Time Complexity: O(n). 
    Only one traversal of the linked list is needed
  • Auxiliary Space: O(1). 
    As no extra space is needed.

Please refer complete article on Delete middle of linked list for more details!



Last Updated : 30 Dec, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads