判断两个循环链表内容是否相等
来源:互联网 发布:免费.tk域名的注册 编辑:程序博客网 时间:2024/05/17 08:39
- 问题描述:循环链表首尾相连都有头结点,然而在很多时候,当两个循环链表长度相等且构成环以后,可能在内容上完全相等,然而若从头结点开始看这两个循环链表可能不能对应相等。此处给出判断两个循环链表内容是否相等的方法。
- 然而还有通常做法中从首字母开始比一直到结束看是否相等,然而当待比较的字符串含有多个基准字符串的首字母时,也应从待比字符串多处地方依次比较。
演示图例1
演示图例2
演示图例3
#include<stdio.h> #include<malloc.h> #include<stdlib.h>typedef struct Lnode //定义链表结点的数据结构 { char data; struct Lnode *next;}node;node *create()//尾插法构建循环链表不带头结点{ char x; node *h, *t; t = h = (node *)malloc(sizeof(node)); h->next = NULL; scanf("%c", &x); while (x !='#') { node *s = (node *)malloc(sizeof(node)); s->data = x; s->next = h->next; t->next = s; t = s; scanf("%c", &x); } t->next=h->next;//尾和head->next相连 return h->next;//不带头结点}int compare(node *A,node*B){ node *p=A; node *tem; node *q=B; int i=0; int flag=0; while(1) { if(q->data!=p->data) q=q->next;//找到B中与A首字符相等的字符位置 if(q==tem)//如果试图找出B中每个与A首字符相等时其后所构成的字符串与A比较失败后,B循环一遍后又回到最初开始比较的位置,则整个比较失败,返回失败。 return false; if(q->data==p->data) while(1) { if(p->data!=q->data) {i++; if(i==1) q=tem;//tem记录第一次找到B中与A首字符相等的字符位置 flag=1;//其后试图第二次找到B中与A首字符相等的字符位置 break; } p=p->next; q=q->next; if(p==A)//如果A链表循环一遍到头值后也未发现不相等的字符则成功 return true ; } if(flag==1) { p=A;flag=0;//试图第二次找到B中与A首字符相等的字符位置时让p指向A的头重新与A进行比较 } }}int main(void){ printf("请输入两个字符串以分别以#号结束") ; node *a=create(); node *b=create(); if(compare(a,b)) printf("两个字符串循环相等为同内容循环链表"); else printf("两个字符串不循环相等为不同内容循环链表");}
阅读全文
0 0
- 判断两个循环链表内容是否相等
- 判断两个表是否相等
- for循环判断两个向量对应数是否相等
- 如何判断两个char*所含内容是否相等
- 判断两个对象内容相等
- 判断两个对象内容相等
- 判断两个图片是否相等
- 判断两个dataset是否相等
- 判断两个字符串是否相等
- 判断两个stack 是否相等
- 判断两个数组是否 相等
- 判断两个颜色是否相等
- 判断两个数组是否相等
- 判断两个日期是否相等
- 判断两个string是否相等
- 判断两个字符串是否相等
- 判断两个对象是否相等
- 判断两个表结构及其数据是否相等
- poj 1273 Drainage Ditches【最大流 dinic】
- 函数返回值、引用和指针的区别思考
- 详解js中的setTimeout()函数
- 文章标题
- 概率性算法
- 判断两个循环链表内容是否相等
- POJ1434 Fill the Cisterns! 二分法
- 17ACM Qingdao 1010 Brute Force Sorting
- 九九乘法表
- 拓扑排序(Topological Sorting)
- Anaconda 安装、配置、基本使用
- ehcache的使用
- vue 事件绑定 处理-
- celery初级教程(六)