17.设计一个算法用于判断带头结点的循环双链表是否对称
第一:创建一个循环双链表
其次:实现题目要求
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include"basicNodeType.h"//通过自创建头文件引入结构体,ctrl+鼠标左键点击即可查看
//双链表
struct DLink{
BNODETYPE data;
DLink* next;
DLink* pre;
};
DLink *createDouLoopLink(){
int n,data;
DLink*head(DLink*)malloc(sizeof(DLink));
head->next=NULL;
head->pre=NULL;
DLink*p=head;
printf("请输出节点个数:n=");
scanf("%d ",&n);
for(int i=0;i<n;i++){
printf("请输出节点个数:i+1");
scanf("%d",&data);
DLink*newP=(DLink)malloc(sizeof(DLink));
newP->data=data;
newP->pre=p;
p->next=newP;
p=newP;
}
p->next=head;
head->pre=p;
return head;
}
//int main()
// DLink*h=createDouloopLink();
// return 0;
struct Link{
int data;
struct Link *next;
struct Link *pre;
};
#define_CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void isSymmetry(Link *h){
struct Link *pre=h->next,*next=h->next;
while(pre!=next&&pre->pre!=next){
//此时存在两种情况,奇数个节点和偶数个节点都要考虑
if(pre->data!=next->data){
printf("该循环双链表不对称");
break;
}
else{
pre=pre->pre;
next=next->next;
}
}
if(pre==next||pre->pre==next){
printf("该循环双链表对称:");
}
}
int main(){
struct Link*head;
Link *createDouLoopLink();
head=createDouLoopLink();
isSymmetry(head);
return 0;
}