//来自memory.c(多项式相乘)
typedef struct Node{//双循环链表
int begin;//这里的数据有两个,可以自行调整
int lens;
struct Node*pre;
struct Node*next;
}Node,*NodePtr;
NodePtr creatListOrder(int n,int a[]);//构建双循环链表
NodePtr searchList(NodePtr list,int value);//在链表中查找lens等于value的元素
int deleteElement(NodePtr list,int value);//删除链表里值为value的函数
void printList(NodePtr list);//打印链表
NodePtr creatListOrder(int n){//构建循环链表
int begin,lens;
NodePtr list=NULL,rear=NULL;
int i=0;
for(;i<n;i++){
scanf("%d%d",&begin,&lens);
NodePtr p=(NodePtr)malloc(sizeof(Node));
p->begin=begin;
p->lens=lens;
p->next=NULL;
if(list==NULL){
list=rear=p;
p->next=p;
p->pre=p;
}else{
rear->next=p;
p->pre=rear;
rear=p;
}
}
rear->next=list;
list->pre=rear;
return list;
}
NodePtr searchList(NodePtr list,int value){//在链表中查找lens等于value的元素
NodePtr initial=list;
if(initial->lens==value){
return initial;
}
//list=list->next;
while(list->next!=initial){
if(list->next->lens==value){
return list->next;
}
list=list->next;
}
return NULL;
}
int deleteElement(NodePtr list,int value){
NodePtr p=searchList(list,value);//找到该数据的位置
if(p->pre==p) return 2;
if(p){
p->pre->next=p->next;
p->next->pre=p->pre;
free(p);
return 1;
}
return 0;
}
void printList(NodePtr list){
NodePtr initial=list;
if(list==initial){
printf("%d %d\n",initial->begin,initial->lens);
}
while(list->next!=initial){
printf("%d %d\n",list->next->begin,list->next->lens);
list=list->next;
}
}