请设计一个算法实现用尾插法创建一个双循环链表。调用已写好的函数printlist将该双循环链表中的元素从前向后打印一遍,然后再从后向前打印一遍。
#include <stdio.h>
#include <stdlib.h>
#define ERROR 0
#define OK 1
typedef int Elemtype;
typedef struct node
{
Elemtype data;
struct node *next,*before;
}dullinklist;
dullinklist *createlist(int n)
{
dullinklist *head,*p,*q,*r;
int i;
head=(dullinklist *)malloc(sizeof(dullinklist));
head->next=head;
p=head;
for(i=1;i<=n;i++){
q=(dullinklist *)malloc(sizeof(dullinklist));
scanf("%d",&(q->data));
p->next=q;
q->before=p;
p=q;
}
p->next=head;
head->before=p;
return head;
}
void printlist(dullinklist *head)
{
dullinklist *p;
p=head->next;
while(p!=head)
{
printf("%d ",p->data);
p=p->next;
}
p=head->before;
while(p!=head)
{
printf("%d ",p->data);
p=p->before;
}
}
int main()
{
dullinklist *head;
int n;
scanf("%d",&n);
head=createlist(n);
printlist(head);
}