判断两个循环链表内容是否相等
2017-09-20 23:51
477 查看
问题描述:循环链表首尾相连都有头结点,然而在很多时候,当两个循环链表长度相等且构成环以后,可能在内容上完全相等,然而若从头结点开始看这两个循环链表可能不能对应相等。此处给出判断两个循环链表内容是否相等的方法。
然而还有通常做法中从首字母开始比一直到结束看是否相等,然而当待比较的字符串含有多个基准字符串的首字母时,也应从待比字符串多处地方依次比较。
演示图例1
演示图例2
演示图例3
然而还有通常做法中从首字母开始比一直到结束看是否相等,然而当待比较的字符串含有多个基准字符串的首字母时,也应从待比字符串多处地方依次比较。
演示图例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("两个字符串不循环相等为不同内容循环链表"); }
相关文章推荐
- 如何判断两个char*所含内容是否相等
- 判断带头结点的双向循环链表L是否对称相等的算法
- 判断两个字符串内容是否相等
- for循环判断两个向量对应数是否相等
- C++文件操作,判断两个文件内容是否相等(被修改)
- JS判断两个对象内容是否相等的方法示例及开发面试题汇总(图)
- JS判断两个对象内容是否相等的方法示例
- 链表知识点(十三)【判断两个链表是否相等】
- 如何判断两个链表是否相交并求出相交点
- 判断链表是否有环和两个单链表是否相交
- 如何用equals判断两个对象是否相等
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列12345是某栈的压入顺序,序列45321为该压栈序列对应弹出顺序。
- 学习体会:在JAVA中如何判断两个对象是否相等
- JavaScript中判断两个字符串是否相等的方法
- 如何判断两个单向链表是否有相交,并找出交点
- 判断java中两个对象是否相等
- 判断两个float或double是否相等
- c语言 判断两个字符串是否相等
- 判断两个字符串是否相等【JAVA】
- java判断两个字符串是否相等?