Java Program To Delete Middle Of Linked List
Last Updated :
30 Dec, 2021
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.Â
Simple solution: The idea is to first count the number of nodes in a linked list, then delete n/2'th node using the simple deletion process.Â
Java
// Java program to delete middle
// of a linked list
import java.io.*;
class GFG {
// Link list Node
static class Node
{
int data;
Node next;
}
// Utility function to create
// a new node.
static Node newNode(int data)
{
Node temp = new Node();
temp.data = data;
temp.next = null;
return temp;
}
// Count of nodes
static int countOfNodes(Node head)
{
int count = 0;
while (head != null)
{
head = head.next;
count++;
}
return count;
}
// Deletes middle node and returns
// head of the modified list
static Node deleteMid(Node head)
{
// Base cases
if (head == null)
return null;
if (head.next == null)
{
return null;
}
Node copyHead = head;
// Find the count of nodes
int count = countOfNodes(head);
// Find the middle node
int mid = count / 2;
// Delete the middle node
while (mid-- > 1)
{
head = head.next;
}
// Delete the middle node
head.next = head.next.next;
return copyHead;
}
// A utility function to print
// a given linked list
static void printList(Node ptr)
{
while (ptr != null)
{
System.out.print(ptr.data +
"->");
ptr = ptr.next;
}
System.out.println("NULL");
}
// Driver code
public static void main(String[] args)
{
// Start with the empty list
Node head = newNode(1);
head.next = newNode(2);
head.next.next = newNode(3);
head.next.next.next = newNode(4);
System.out.println("Given Linked List");
printList(head);
head = deleteMid(head);
System.out.println(
"Linked List after deletion of middle");
printList(head);
}
}
// This code is contributed by rajsanghavi9
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).Â
Two traversals of the linked list is needed - Auxiliary Space: O(1).Â
No extra space is needed.
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. Â
Java
// Java program to delete the
// middle of a linked list
class GfG
{
// Link list Node
static class Node
{
int data;
Node next;
}
// Deletes middle node and returns
// head of the modified list
static Node deleteMid(Node 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
Node slow_ptr = head;
Node fast_ptr = head;
// Find the middle and previous
// of middle.
Node 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
static void printList(Node ptr)
{
while (ptr != null)
{
System.out.print(ptr.data + "->");
ptr = ptr.next;
}
System.out.println("NULL");
}
// Utility function to create a
// new node.
static Node newNode(int data)
{
Node temp = new Node();
temp.data = data;
temp.next = null;
return temp;
}
// Driver code
public static void main(String[] args)
{
// Start with the empty list
Node head = newNode(1);
head.next = newNode(2);
head.next.next = newNode(3);
head.next.next.next = newNode(4);
System.out.println("Given Linked List");
printList(head);
head = deleteMid(head);
System.out.println("Linked List after deletion of middle");
printList(head);
}
}
// This code is contributed by Prerna saini
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!
Similar Reads
Java Program To Delete Alternate Nodes Of A Linked List Given a Singly Linked List, starting from the second node delete all alternate nodes of it. For example, if the given linked list is 1->2->3->4->5 then your function should convert it to 1->3->5, and if the given linked list is 1->2->3->4 then convert it to 1->3. Recomm
3 min read
Java Program For Finding The Middle Element Of A Given Linked List Given a Singly linked list, find the middle of the linked list. If there are even nodes, then there would be two middle nodes, we need to print the second middle element. Example of Finding Middle Element of Linked ListInput: 1->2->3->4->5 Output: 3Â Input: 1->2->3->4->5->
6 min read
Java Program to Delete a Node From the Middle of the Circular Linked List In this article, we are going to learn to delete the middle node from the circular Linked List in java. The approach we are going to follow for this program is, first we calculate the number of nodes in the list and then divide the number of nodes by 2 to get the middle node of the list. Algorithm C
4 min read
Java Program For Inserting Node In The Middle Of The Linked List Given a linked list containing n nodes. The problem is to insert a new node with data x at the middle of the list. If n is even, then insert the new node after the (n/2)th node, else insert the new node after the (n+1)/2th node. Examples: Input : list: 1->2->4->5 x = 3 Output : 1->2->
5 min read
Java Program For Deleting A Node In A Linked List We have discussed Linked List Introduction and Linked List Insertion in previous posts on a singly linked list.Let us formulate the problem statement to understand the deletion process. Given a 'key', delete the first occurrence of this key in the linked list. Iterative Method:To delete a node from
3 min read
Java Program For Moving Last Element To Front Of A Given Linked List Write a function that moves the last element to the front in a given Singly Linked List. For example, if the given Linked List is 1->2->3->4->5, then the function should change the list to 5->1->2->3->4. Algorithm: Traverse the list till the last node. Use two pointers: one t
3 min read
Java Program to Implement Triply Linked List Unlike arrays, linked list elements are not stored at a contiguous location; the elements are linked using pointers. In this post, methods to insert a new node in a linked list are discussed. A node can be inserted in three ways either at the front of the linked list or after a given node or at the
8 min read
Java Program For Making Middle Node Head In A Linked List Given a singly linked list, find middle of the linked list and set middle node of the linked list at beginning of the linked list. Examples: Input: 1 2 3 4 5 Output: 3 1 2 4 5 Input: 1 2 3 4 5 6 Output: 4 1 2 3 5 6 The idea is to first find middle of a linked list using two pointers, first one moves
3 min read
Java Program to Insert a New Node at the Middle of the Circular Linked List Given a Circular Linked List, the task is to add a New Node at the Middle of the List. Let's consider the following Circular Linked List: List-Before-InsertionList-After-InsertionCreate a new node (New_node).Check for an empty list. If the list is empty then insert the node as head.For non-empty lis
3 min read
Java Program to Delete a Node From the Ending of the Circular Linked List In this article, we will learn about deleting a node from the ending of a circular linked list. Consider the linked list as shown below:Â Example:Input : 5->3->4->(head node)Output: 5->3->(head node)We will first initialize the list and add some data into it with the addNode() method a
3 min read