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.
In java programming, the solution is given below
Method 1 (Iterative):
Keep track of previous of the node to be deleted. First change the next link of previous node and then free the memory allocated for the node
Java Programming: Delete alternate nodes of linked list:
class LinkedList
{
Node head;
class Node
{
int data;
Node next;
Node(int d) {data = d; next = null; }
}
void deleteAlt()
{
if (head == null)
return;
Node prev = head;
Node now = head.next;
while (prev != null && now != null)
{
prev.next = now.next;
now = null;
prev = prev.next;
if (prev != null)
now = prev.next;
}
}
public void push(int new_data)
{
Node new_node = new Node(new_data);
new_node.next = head;
head = new_node;
}
void printList()
{
Node temp = head;
while(temp != null)
{
System.out.print(temp.data+" ");
temp = temp.next;
}
System.out.println();
}
public static void main(String args[])
{
LinkedList llist = new LinkedList();
llist.push(5);
llist.push(4);
llist.push(3);
llist.push(2);
llist.push(1);
System.out.println("Linked List before calling deleteAlt() ");
llist.printList();
llist.deleteAlt();
System.out.println("Linked List after calling deleteAlt() ");
llist.printList();
}
}
Output:
List before calling deleteAlt()
1 2 3 4 5
List after calling deleteAlt()
1 3 5
Time Complexity: O(n) where n is the number of nodes in the given Linked List.
Method 2 (Recursive):
Recursive code uses the same approach as method 1. The recursive code is simple and short, but causes O(n) recursive function calls for a linked list of size n.
Java Programming:
void deleteAlt(struct node *head)
{
if (head == NULL)
return;
struct node *node = head->next;
if (node == NULL)
return;
head->next = node->next;
free(node);
deleteAlt(head->next);
}
Time Complexity: O(n)