这个是我在做王道考研的题目时所写
#include<stdio.h>
#include<stdlib.h>
#define ElemType int
typedef struct DNode{
ElemType data;
struct DNode *next,*prior;
}DNode,*DinkList;
//构造一个带头结点的循环双链表
DinkList List_HeadInsert(DinkList &L)
{
DNode *s,*r;
int x;
L=(DinkList)malloc(sizeof(DNode));
L->next=NULL;
scanf("%d",&x);
if(x==9999)return NULL;
r=(DNode*)malloc(sizeof(DNode));
r->data=x;
r->next=L;
L->prior=r;
L->next=r;
r->prior=L;
scanf("%d",&x);
while(x!=9999)
{
s=(DNode*)malloc(sizeof(DNode));
s->data=x;
s->next=L->next;
L->next->prior=s;
s->prior=L;
L->next=s;
scanf("%d",&x);
}
return L;
}
//判断这个链表是否对称:
bool JudgeSame(DinkList L)
{
DNode *s,*r;
s=L->next;
r=L->prior;
if(s==r)return false;
while(s!=r)
{
if(r->data==s->data)
{
if(s->next==r)return true;
s=s->next;
r=r->prior;
}
else return false;
}
return true;
}
//销毁这个链表:
void DestroyLinkList(DinkList &L)
{
DNode* p;
while(L->next->prior!=L)
{
p=L;
L=L->next;
free(p);
}
free(L->next);
free(L);
return;
}
int main()
{
DinkList L;
printf("\n创建一个带头结点的循环双链表:\n");
L=List_HeadInsert(L);
if(JudgeSame(L))
printf("\n此双链表对称\n");
else
printf("\n此双链表不对称\n");
DestroyLinkList(L);
return 0;
}