怎么比较两个单链表中的数据是否相同
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;}