Introduction to the basic application of two way linked list insertion and deletion

  • 2020-04-01 21:31:03
  • OfStack

Double linked list is nothing but an extra front chain, right
Definition of double linked list
 
struct DNode 
{ 
int data; 
struct DNode *next; 
struct DNode *pre; 
}; 

Definition of a single linked list
 
view plaincopy 
struct DNode 
{ 
int data; 
struct DNode *next; 
}; 

The rest of you can read a blog post about the same
 
#ifndef HEAD_H 
#define HEAD_H 
#include <iostream> 
using namespace std; 
#include <cassert> 
#include <cstdlib> 
#include <cmath> 
#include <sstream> 
#include <fstream> 
#include <string> 
#include <algorithm> 
#include <list> 
#include <queue> 
#include <vector> 
#include <deque> 
#include <stack> 
#include <bitset> 
#include <set> 
#include <map> 
#endif 
struct DNode 
{ 
int data; 
struct DNode *next; 
struct DNode *pre; 
}; 
DNode *Creat() 
{  
DNode *head,*p,*s; 
head=(DNode *)malloc(sizeof(DNode)); 
p=head; 
int temp; 
while (cin>>temp&&temp) 
{ 
s=(DNode *)malloc(sizeof(DNode)); 
s->data=temp; 
p->next=s; 
s->pre=p; 
p=s; 
} 
head=head->next; 
p->next=NULL; 
head->pre=NULL; 
return (head); 
} 
DNode *Insert(DNode *&head,int num) 
{ 
DNode *p,*s; 
s=(DNode *)malloc(sizeof(DNode)); 
s->data=num; 
p=head; 
while (NULL!=p->next&&num>p->data) 
{ 
p=p->next; 
} 
if (num<=p->data) 
{ 
if (NULL==p->pre) 
{ 
s->next=head; 
head->pre=s; 
head=s; 
head->pre=NULL; 
} 
else 
{ 
s->pre=p->pre; 
p->pre->next=s; 
s->next=p; 
p->pre=s; 
} 
} 
else 
{ 
p->next=s; 
s->pre=p; 
s->next=NULL; 
} 
return(head); 
} 
DNode *Del(DNode *&head,int num) 
{ 
DNode *p; 
p=head; 
while (NULL!=p->next&&num!=p->data) 
{ 
p=p->next; 
} 
if (num==p->data) 
{ 
if (NULL==p->pre) 
{ 
head=p->next; 
p->next->pre=head; 
free(p); 
} 
else if (NULL==p->next) 
{ 
p->pre->next=NULL; 
free(p); 
} 
else 
{ 
p->pre->next=p->next; 
p->next->pre=p->pre; 
free(p); 
} 
} 
else 
{ 
cout<<num<<" cound not be found"<<endl; 
} 
return head; 
} 
void Display(DNode *head) 
{ 
DNode *p; 
p=head; 
while (NULL!=p) 
{ 
cout<<(p->data)<<" "; 
p=p->next; 
} 
cout<<endl; 
} 

 
#include "head.h" 
int main() 
{ 
DNode *head; 
head=Creat(); 
Display(head); 
#ifndef DEBUG 
cout<<"please input an num to insert:"; 
#endif 
int insert_num; 
while (cin>>insert_num&&insert_num) 
{ 
Insert(head,insert_num); 
Display(head); 
} 
#ifndef DEBUG 
cout<<"please input an number to delete:"; 
#endif 
int delete_num; 
while (cin>>delete_num&&delete_num) 
{ 
Del(head,delete_num); 
Display(head); 
} 
return (EXIT_SUCCESS); 
} 

Related articles: