单链表第十七题(判断循环双链表是否对称)

该代码实现了一个创建循环双链表的函数`createDouLoopLink`,并提供了`isSymmetry`函数来检查链表是否对称。通过对链表中的元素进行比较,如果在遍历过程中发现不匹配的元素则输出不对称,否则链表对称。

 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;   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值