#include<stdio.h>
#include<malloc.h>
#define ElemType int
typedef struct DulLNode{
ElemType data;
struct DulLNode *lLink,*rLink;
//定义双指针,
//lLink头指针,rLink尾指针
}DulLNode;
DulLNode *create_DulLNode(DulLNode *first){//双向循环链表
DulLNode *newp;
int a;
DulLNode *tail;
first=tail=(DulLNode *)malloc(sizeof(DulLNode));
first->rLink=first;//创建带头节点的循环双向链表
first->lLink=first->rLink;
printf("请输入节点a:
");
scanf("%d",&a);
while(a!=-1){
newp=(DulLNode *)malloc(sizeof(DulLNode));
newp->data=a;
//尾插创建链表
newp->rLink=first;
newp->lLink=tail->rLink;
tail->rLink=newp;
first->lLink=newp->rLink;
tail=newp;
scanf("%d",&a);
}
return first;
}
DulLNode *Insert_DulLNode(DulLNode *first){//在节点p后插入新节点
DulLNode *newp,*p;
int a,b;
newp=(DulLNode *)malloc(sizeof(DulLNode));
p=first->rLink;
printf("请输入插入的节点及谁的后面
");
scanf("%d %d",&a,&b);
for(p=first->rLink;p!=first;p=p->rLink){
if(p->data==b){
newp->data=a;
newp->rLink=p->rLink;
newp->lLink=p;
p->rLink=newp;
p->rLink->lLink=newp;
break;
}
}
return first;
}
DulLNode *Delete_ByValue(DulLNode *first){
//根据值删除节点
DulLNode *q,*p;
int a;
printf("输入你要删除的节点
");
scanf("%d",&a);
for(p=first->rLink,q=first;p!=first;){
if(p->data==a){
q->rLink=p->rLink;
(p->rLink)->lLink=q;
free(p);
break;
}else{
p=p->rLink;
q=q->rLink;
}
}
return first;
}
void print(DulLNode *first){//s输出函数
DulLNode *p;
for(p=first->rLink;p!=first;p=p->rLink){
printf("%d ",p->data);
}
printf("
");
}
int main(){
DulLNode *first;
first=create_DulLNode(first);
print(first);
first=Insert_DulLNode(first);
print(first);
first=Delete_ByValue(first);
print(first);
return 0;
}