怎么比较两个单链表中的数据是否相同

xviubu 2012-04-02 05:01:06
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 顶端
...全文
2024 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
昵称很不好取 2012-04-02
  • 打赏
  • 举报
回复
这两个问题其实差不多,第一个可以通过将前n个元素倒置变为第二个问题,其实都是遍历链表看元素是否相等
summer_insects 2012-04-02
  • 打赏
  • 举报
回复
说白了,就是两个指针分别指向两个链表
同时移动,并作判断,一旦数据不相等就跳出
summer_insects 2012-04-02
  • 打赏
  • 举报
回复
改了下,仅供参考
另外,把你的部分变量名也改了

/* 已知单链表的头指针为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;
}

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧