Delete alternate nodes of a Doubly Linked List

Given a doubly linked list which is contain N nodes. Delete every alternative nodes in this linked list which are exist in Even position. Suppose linked list contain following (1,2,3,6,7,8,9,10) node in a sequence.

Hint In this problem head node are not delete. So the idea are, visit first node of linked list and delete next upcoming nodes. In next time iteration visits of next node and remove upcoming next nodes. Repeating this process until last node of linked list.

Here given code implementation process.

``````//C Program
//Delete alternate nodes of a Doubly Linked List
#include <stdio.h>
#include <stdlib.h> //for malloc function

//create structure
struct Node{
int data;
struct Node*next;
struct Node*prev;
};

//function prototype
void insert(struct Node**,int);
void display(struct Node*);
void delete_node(struct Node*);

//insert Node element of end of linked list

//Create a dynamic node
struct Node*node=(struct Node*)malloc(sizeof(struct Node));
if(node==NULL){
printf("Memory overflow\n");
}else{
//Set data value
node->data=value;
node->next=NULL;
node->prev=NULL;
}else{
//Find last node
while(temp!=NULL && temp->next!=NULL){
temp=temp->next;
}
//Add new node to last positions
temp->next=node;
node->prev=temp;

}
}
}
//Display element of Node
void display(struct Node*temp){

if(temp==NULL){
}
else{

//Traverse doubly linked list from front to rear
while(temp!=NULL){
//print node value
printf("  %d",temp->data);
temp=temp->next;
}
}

}

//Delete all alternate nodes
}else{

signed int flag=0;
while(temp!=NULL){

//check deleted node
if(flag== 1){
hold=temp;
//modified pointer values
if(temp->next!=NULL){
temp->next->prev=temp->prev;
}
if(temp->prev!=NULL){
temp->prev->next=temp->next;
}

temp=temp->next;
hold->next=NULL;
hold->prev=NULL;

free(hold);
hold=NULL;

flag=0;
}else{
temp=temp->next;
flag=1;
}
}
}
}

int main(){
//set node pointer value

printf("Before Delete alternate nodes : ");
//display all node
printf("\nAfter Delete alternate nodes :");

//display all node
return 0;
}``````

Output

``````Before Delete alternate nodes :
Linked List Elements :  1  2  3  6  7  8  9  10
After Delete alternate nodes :
Linked List Elements :  1  3  7  9``````
``````//C++ Program
//Delete alternate nodes of a Doubly Linked List
#include<iostream>
using namespace std;
//create structure
struct Node{
int data;
Node*next;
Node*prev;
};
class DoublyList{
public:
DoublyList();
void insert(int);
void display();
void delete_node();

};
//set inital value
DoublyList::DoublyList(){
}

//insert a linked list Node element
void DoublyList:: insert(int value){
//Create a dynamic node
Node*node=new Node;
if(node==NULL){
cout<<"Memory overflow\n";
}
else{
//set data value
node->data=value;
node->next=NULL;
node->prev=NULL;
}else{
//find last node
while(temp!=NULL && temp->next!=NULL){
temp=temp->next;
}
//add new node to last positions
temp->next=node;
node->prev=temp;

}
}
}
//display all element of doubly linked list
void DoublyList::display(){

}
else{
while(temp!=NULL){
//display node elemement
cout<<" "<<temp->data;
temp=temp->next;
}
}

}

//Delete all alternate nodes
void  DoublyList:: delete_node(){
}else{

signed int flag=0;
while(temp!=NULL){
//check deleted node
if(flag==1){
hold=temp;
//modified pointer values
if(temp->next!=NULL){
temp->next->prev=temp->prev;
}
if(temp->prev!=NULL){
temp->prev->next=temp->next;
}

temp=temp->next;
hold->next=NULL;
hold->prev=NULL;

delete hold;
hold=NULL;
flag=0;

}else{
flag=1;
temp=temp->next;
}
}

}
}

int main(){
DoublyList obj=DoublyList();

obj.insert(1);
obj.insert(2);
obj.insert(3);
obj.insert(6);
obj.insert(7);
obj.insert(8);
obj.insert(9);
obj.insert(10);
cout<<"Before Delete alternate nodes  "<<endl;
//display all node
obj.display();
cout<<"\nAfter Delete alternate nodes "<<endl;
obj.delete_node();
//display all node
obj.display();
return 0;
}``````

Output

``````Before Delete alternate nodes
Linked List Element : 1 2 3 6 7 8 9 10
After Delete alternate nodes
Linked List Element : 1 3 7 9``````
``````//Java program
//Delete alternate nodes of a Doubly Linked List

static class Node{
int data;
Node next;
Node prev;
}
//Class constructors
}
static void insert(int value){
//Create a dynamic node
Node node=new Node();
//add node value and pointer value
node.data=value;
node.next=null;
node.prev=null;
//when no element
else{
//find last node
while(temp.next!=null) temp=temp.next;
node.prev=temp;
temp.next=node;
}
}
//display all Linked List node value
static void display(){
while(temp!=null){
//display node value
System.out.print("  "+temp.data);
temp=temp.next;
}
}else{
}
}

//Delete all alternate nodes
public static void  deleteNode(){
}else{
boolean flag=false;
while(temp!=null){
//check deleted node
if(flag==true){
hold=temp;
//modified pointer
if(temp.next!=null){
temp.next.prev=temp.prev;
}
if(temp.prev!=null){
temp.prev.next=temp.next;
}

temp=temp.next;
hold.next=null;
hold.prev=null;

hold=null;
flag=false;

}else{
flag=true;
temp=temp.next;
}
}

}
}

public static void main(String[] args) {

obj.insert(1);
obj.insert(2);
obj.insert(3);
obj.insert(6);
obj.insert(7);
obj.insert(8);
obj.insert(9);
obj.insert(10);
System.out.println("Before Delete alternate nodes ");
//display all node
obj.display();
System.out.println("\nAfter Delete alternate nodes ");
obj.deleteNode();
//display all node
obj.display();
}
}``````

Output

``````Before Delete alternate nodes
Linked List Element :  1  2  3  6  7  8  9  10
After Delete alternate nodes
Linked List Element :  1  3  7  9``````
``````#Python Program
#Delete alternate nodes of a Doubly Linked List
class Node:
def __init__(self,data):
self.data=data
self.next=None
self.prev=None

def __init__(self):

#insert new node to end of Linked List
def insert(self,data):
#make a new node
node=Node(data)

#when empty list
else:
#find last node
while temp.next!=None:
temp=temp.next
temp.next=node
node.prev=temp

#Delete all alternate nodes
def deleteNode(self):
else:
flag=False
while(temp!=None):
#check deleted node
if(flag==True):
hold=temp

if(temp.next!=None):
temp.next.prev=temp.prev

if(temp.prev!=None):
temp.prev.next=temp.next

temp=temp.next
hold.next=None
hold.prev=None
hold=None
flag=False

else:
temp=temp.next
flag=True

#view all node values
def display(self):
return
print("Linked List Elements : ",end=" ")

while(temp!=None):
#print node value
print(temp.data,end=" ")
temp=temp.next

def main():

obj.insert(1)
obj.insert(2)
obj.insert(3)
obj.insert(6)
obj.insert(7)
obj.insert(8)
obj.insert(9)
obj.insert(10)
print("Before Delete alternate nodes ")
#display all node
obj.display()
print("\nAfter Delete alternate nodes ")
obj.deleteNode()
#display all node
obj.display()

if(__name__=="__main__"):
main()``````

Output

``````Before Delete alternate nodes
Linked List Elements :  1 2 3 6 7 8 9 10
After Delete alternate nodes
Linked List Elements :  1 3 7 9``````
``````//C# Program
//Delete alternate nodes of a Doubly Linked List
using System;
public class Node{
public  int data;
public  Node next;
public Node prev;
}
class Program
{
public Program(){
}
public void insert(int data){
//Create a dynamic node
Node node=new Node();
//add node value and pointer value
node.data=data;
node.next=null;
node.prev=null;
//when no element
else{
//find last node
while(temp.next!=null) temp=temp.next;
node.prev=temp;
temp.next=node;
}
}

//Delete all alternate nodes
public void  deleteNode(){
}else{

bool flag=false;
while(temp!=null){
//check deleted node
if(flag==true){
hold=temp;

}
if(temp.next!=null){
temp.next.prev=temp.prev;
}
if(temp.prev!=null){
temp.prev.next=temp.next;
}

temp=temp.next;
hold.next=null;
hold.prev=null;

hold=null;
flag=false;

}else{
flag=true;
temp=temp.next;
}
}
}
}

public void display(){
Console.Write("Empty List");
}else{
while(temp!=null){
//display node value
Console.Write("  {0}",temp.data);
temp=temp.next;
}

}
}

static void Main()
{
Program obj=new Program();

obj.insert(1);
obj.insert(2);
obj.insert(3);
obj.insert(6);
obj.insert(7);
obj.insert(8);
obj.insert(9);
obj.insert(10);
Console.Write("Before Delete alternate nodes ");
//display all node
obj.display();
Console.Write("\nAfter Delete alternate nodes ");
obj.deleteNode();
//display all node
obj.display();

}
}``````

Output

``````Before Delete alternate nodes
Linked List : 1 2 3 6 7 8 9 10
After Delete alternate nodes
Linked List : 1 3 7 9``````

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.