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;
}
该代码实现了一个创建循环双链表的函数`createDouLoopLink`,并提供了`isSymmetry`函数来检查链表是否对称。通过对链表中的元素进行比较,如果在遍历过程中发现不匹配的元素则输出不对称,否则链表对称。
&spm=1001.2101.3001.5002&articleId=131449686&d=1&t=3&u=757d97ef17e949fcae7b2073d9158f6b)
2605

被折叠的 条评论
为什么被折叠?



