#include <stdio.h>

#include <stdlib.h>

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 typedef struct aa{  

int data;

  struct aa  *rlink;

  struct aa  *llink;

}DLink;

DLink * createLink(DLink *head){//头节点  

   DLink *p,*q;  

   int n;  

   head=p=(DLink *)malloc(sizeof(DLink));

 head->rlink=NULL;

 head->llink=NULL;  

   scanf("%d",&n);   

  while(n!=-1){//以输入-1作为输入数据的结束

 q=(DLink *)malloc(sizeof(DLink));

 q->llink=NULL;

 p->llink=q;

 q->rlink=p;

 p=p->llink;

 p->data=n;

 scanf("%d",&n);

  }  

return head;

}

void printLink(DLink *p){

 do{

   p=p->llink;   

   printf("%d ",p->data);

  }while(p->llink!=NULL);

 }

DLink * insertdate(DLink *head,int i,int n){

 int j;

 DLink *p=head;

 DLink *q;

 DLink *s;

 s=(DLink *)malloc(sizeof(DLink));

 s->data=n;

 if(p->llink==NULL){  

   p->llink=s;  

   s->rlink=p;  

   return head;

 }

 q=p->llink;

 for(j=1;j<i&&q!=NULL;j++){

  p=p->llink;  

 q=p->llink;

 }  

  if(q==NULL)    

   {

   p->llink=s;   

   s->rlink=q;     

}   

else{    

s->llink=q;   

  q->rlink=s;   

  p->llink=s;  

   s->rlink=p;

  }  

return head;

}

  DLink * deleteLink(DLink *head,int j){

 int i=1;

 DLink *p=head,*q=head->llink;

 while(i<j&&q!=NULL){

  p=p->llink;

  q=q->llink;

  i++;

 }

 if(i==j){

   p->llink=q->llink;  

  q->llink->rlink=p; 

   } 

 return head; 

  }

int main(){

 int i,j,n;//i是要插入的序号,n是要插入的数据,j是要删除的序号   

DLink *L;  

  printf("请输入双向链表的数据,输入-1结束结束输入数据:");

   L=createLink(L);//创建链表  

  printLink(L);//输出链表  

  printf("请输入要插入的序号和数据(序号要大于0):");  

  scanf("%d %d",&i,&n);  

  L=insertdate(L,i,n);//插入数据  

  printLink(L);  

  printf("请输入请输入要删除数据的序号(序号要大于0且本序号有对应的数据):");  

  scanf("%d",&j);  

  L=deleteLink(L,j);//删除链表  

  printLink(L);

}

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄