首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

如何比较两个单链表中的数据是否相同

2012-04-08 
怎么比较两个单链表中的数据是否相同1 /*已知单链表的头指针为head,数据域为字符型,请编写算法,判断该链表

怎么比较两个单链表中的数据是否相同
1 /*已知单链表的头指针为head,数据域为字符型,请编写算法,判断该链表的前n个字符是否中心对称。例如,abba、abcba都是中心对称。*/
  2 /*算法:将单链表倒置后,保存在另一个单链表中,然后依次比较两个单链表中各个元素是否相同*/
  3 #include<stdio.h>
  4 #include<stdlib.h>
  5 
  6 
  7 typedef char ElemType;
  8 typedef struct Node
  9 {
 10 struct Node *next;
 11 ElemType data;
 12 }Node,*LinkedList;
 13 /*单链表的建立*/
 14 LinkedList LinkedListCreatT()
 15 {
 16 Node *L;
 17 L=(Node*)malloc(sizeof(Node));
 18 L->next=NULL;
 19 Node *r;
 20 r=L;
 21 ElemType x;
 22 while(scanf("%c",&x)!=EOF)
 23 {
 24 Node *p;
 25 p=(Node *)malloc(sizeof(Node));
 26 p->data=x;
 27 r->next=p;
 28 r=p;
 29 
 30 }
 31 r->next=NULL;
 32 return L;
 33 }
 34 
 35 /*单链表的倒置*/
 36 LinkedList LinkedListInverse(LinkedList L)
 37 {
 38 Node *p=L->next,*q;
 39 L->next=NULL;
 40 
 41 while(p!=NULL)
 42 {
 43 q=p->next;
 44 p->next=L->next;
 45 L->next=p;
 46 p=q;
 47 }
 48 return L;
 49 }
 50 /*判断是否为中心对称*/
 51 void Cent(LinkedList L)
 52 {
 53 Node *temp,*i,*j;
 54 temp=LinkedListInverse(L);
 55 /****************************************/
 56 for(i=L->next;i!=NULL;i=i->next) //问题是怎么比较两个单链表中数据是否相同
 57 { for(j=temp->next;j!=NULL;j=j->next) //这里的循环不会写,球大侠帮忙看看
 58 {if(i->data==j->data) printf("YES");
 59 else printf("NO");  
  /***************************************************/
 60 }}
 61 }
 62 void main()
 63 {
 64 Node *list,*i;
 65 printf("输入要测试的字符链表:");
 66 list=LinkedListCreatT();
 67 Cent(list);
 68 }
~  
~  
~  
~  
~  
~  
~  
~  
~  
//问题是怎么比较两个单链表中数据是否相同~  
  39,7 底端


  1,1 顶端


[解决办法]
改了下,仅供参考
另外,把你的部分变量名也改了

C/C++ code
/* 已知单链表的头指针为head,数据域为字符型,请编写算法,判断该链表的前n个字符是否中心对称。例如,abba、abcba都是中心对称。*//* 算法:将单链表倒置后,保存在另一个单链表中,然后依次比较两个单链表中各个元素是否相同 */#include <stdio.h>#include <stdlib.h>typedef char ElemType;typedef struct Node{    struct Node *next;    ElemType data;} Node, *LinkedList;/* 单链表的建立 */LinkedList LinkedListCreatT(){    Node *L, *p, *q;    ElemType ch;    L = (Node *)malloc(sizeof(Node));    L->next = NULL;    q = L;    /* 这里改成换行表示输入结束,因为本人实在不会用EOF */    for (ch = getchar(); ch != '\n'; ch = getchar())    {        p = (Node *)malloc(sizeof(Node));        p->data = ch;        q->next = p;        q = p;    }    q->next = NULL;    return L;}/* 删除单链表(新加的) */void DeleteList(LinkedList *L){    Node *p = *L, *q;    while (p != NULL)    {        q = p;        p = p->next;        free(q);        q = NULL;    }}/* 单链表的倒置 *//* 这个函数的问题在于,改变了原表!这是我改之后的 */LinkedList LinkedListInverse(LinkedList L){    Node *p, *q, *N;    N = (Node *)malloc(sizeof(Node));    N->next = NULL;    for (p = L->next; p != NULL; p = p->next)    {        q = (Node *)malloc(sizeof(Node));        q->data = p->data;        q->next = N->next;        N->next = q;    }    return N;}/* 判断是否为中心对称 */void Cent(LinkedList L){    Node *temp, *p, *q;    temp = LinkedListInverse(L);    /* 比较两个单链表中数据是否相同 */    p = L->next;    q = temp->next;    while (p != NULL && q != NULL)    {        if (p->data != q->data)        {            printf("NO\n");            DeleteList(&temp);            return;        }        p = p->next;        q = q->next;    }    printf("YES\n");}int main(){    Node *list;    printf("输入要测试的字符链表:");    list = LinkedListCreatT();    Cent(list);    DeleteList(&list);    return 0;} 

热点排行