c语言数据结构链表遍历

问题遇到的现象和发生背景

小T昨天很不爽
昨天体彩销售点买了2注生日号码玩,当晚开奖后……
小T号码: 8902088
中奖号码:3902888
一个号码不对就差了十几万……
小T想:为什么规则是那样玩的啊……为什么5个号码要连续才能中二等奖啊……
我自己创建个规则,开N个数字,只要数字位置对了不一定要连续就可以有奖。
现在有一个中奖号码,有一个兑奖号码,小T想知道一共有多少个数字位置正确的,N太大了……

要求用链表做
输入:

输入数据第一行包含一个整数T表示有T组测试数据

对于每组测试数据

第一行包含一个整数N,表示有N个数字

第二行包含N个中奖号码

第三行包含N个兑奖号码

输出:

对于每组测试数据输出有多少个号码位置正确了

样例输入:

2
7
3902888
8902088
10
1234567890
0987654321

样例输出:
5
0

#include<stdio.h>
#include<stdlib.h>
 
typedef struct node
{
    char data;/*数据域*/ 
    struct node *next;/*指针域*/
} Node,*Link;
 
void destroy(Link head)
{
   Link  p;
   while (head!=NULL)/*当还有头结点存在时*/
   {
      p=head;/*头结点是待删除结点*/
      head=head->next;/*先连*/
      free(p);/*后断*/
   }
}
 
int main()
{
    int t,i,j,n,count;
    scanf("%d",&t);
    int *rt = (int  *)malloc(sizeof(int) * t); /* 申请一个用来记录结果数据的数组。*/
    for(i =0;i<t;i++) /*多组输入*/
    {
        count=0;
        scanf("%d",&n);
        Link head1,head2,c1,c2,l;
        head1=NULL; 
        head2=NULL;
        for(j=0; j<n; j++)/*创建后续节点*/
        {
            l=(Link)malloc(sizeof(Node));
            l->next=NULL;
            scanf("%c",&(l->data));
     
            if(head1==NULL){
                head1=l;
                c1=head1;
            }else{
                c1->next=l;
                c1=l;
            }
        }
        getchar();
        for(j=0; j<n; j++)/*创建后续节点*/
        {
            l=(Link)malloc(sizeof(Node));
            l->next=NULL;
            scanf("%c",&(l->data));
            
            if(head2==NULL){
                head2=l;
                c1=head2;
            }else{
                c1->next=l;
                c1=l;
            }
        }
        c1=head1;
        c2=head2;
        while(c1!=NULL)/*因为中奖号码和兑奖号码一样长,当c1不为空时,c2也不为空*/
        {
            if(c1->data==c2->data)/*他们相等时*/
               count++;
            c1=c1->next;/*往后移*/
            c2=c2->next;
        }
        rt[i]=count;
        destroy(head1);
        destroy(head2);
    }
    for(i=0;i<t;i++){
       printf("%d\n",rt[i]);
    }
    return 0;
}

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    char data;//数据域
    struct node *next;//指针域
} Node,*Link;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)//多组输入
    {
        int count=0,n;
        scanf("%d",&n);
        Link head1,head2,p1,p2;
        head1=(Link)malloc(sizeof(Node));//创建头节点
        head2=(Link)malloc(sizeof(Node));
        head1->next=NULL;
        head2->next=NULL;
        for(int i=0; i<n; i++)//创建后续节点
        {
            Link p1=(Link)malloc(sizeof(Node));
            scanf("%c",&(p1->data));
            p1->next=head1->next;
            head1->next=p1;
        }
        getchar();
        for(int i=0; i<n; i++)
        {
            Link p2=(Link)malloc(sizeof(Node));
            scanf("%c",&(p2->data));
            p2->next=head2->next;
            head2->next=p2;
        }
        p1=head1->next;
        p2=head2->next;
        while(p1!=NULL)//因为中奖号码和兑奖号码一样长,当p1不为空时,p2也不为空
        {
            if(p1->data==p2->data)//他们相等时
               count++;
            p1=p1->next;//往后移
            p2=p2->next;
        }
        printf("%d\n",count);
    }
    return 0;
}

你这算法没意义啊!算出的结果体量太大结论还是靠猜,还是逃脱不了正态分布,建议重新设计算法。
算法思路可以给你一个...不想说话
https://baijiahao.baidu.com/s?id=1727076337553315074&wfr=spider&for=pc&searchword=%E6%8A%9B%E7%A1%AC%E5%B8%81%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83