判断两个循环链表内容是否相等

来源:互联网 发布:免费.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("两个字符串不循环相等为不同内容循环链表");}
原创粉丝点击