题目中输入一个n,然后输入n个值,随后在输入需要删除的位置(注意双链表的打印的时候是向前向后打印,具体实例请参见测试样例),请补全DeleteElem(DulLinkList *head,int i)
函数所缺失的部分来实现这个算法。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *next,*before;
}DulLinkList;
DulLinkList *CreatList(int n)
{
int i;
DulLinkList *head,*p,*r;
head=(DulLinkList *)malloc(sizeof(DulLinkList));
head->before=NULL;
r=head;
for(i=1;i<=n;i++){
p=(DulLinkList *)malloc(sizeof(DulLinkList));
scanf("%d",&(p->data));
r->next=p;
p->before=r;
r=p;
}
r->next=NULL;
return head;
}
int DeleteElem(DulLinkList *head,int i)
{
int j=0;
DulLinkList *p,*q;
if(i<1)
{
return ERROR;
}
p=head;
while(p->next!=NULL&&j<i-1)
{
p=p->next;
j++;
}
if(p->next==NULL)
{
return ERROR;
}
q=p->next;
p->next=q->next;
q->next->before=p;
return OK;
}
void PrintList(DulLinkList *head)
{
DulLinkList *pre,*p;
pre=head;
p=head->next;
while(p!=NULL)
{
printf("%d ",p->data);
pre=p;
p=p->next;
}
while(pre!=head)
{
printf("%d ",pre->data);
pre=pre->before;
}
}
int main(void)
{
DulLinkList *L;
int i,n;
scanf("%d",&n);
L=CreatList(n);
scanf("%d",&i);
DeleteElem(L,i);
PrintList(L);
}