Ice-Sniper 2022-03-24 20:22 采纳率: 92.9%
浏览 46
已结题

求两个链表的交集的代码,请问哪里出错了

img


我试着创建第三个链表,将两个链表中相等的数放入该链表中并且输出,但是得不到输出结果
这是我的整段代码
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}Node,Linklist;
void Initlist(Linklist &L)//初始化链表
{
L=(Node
)malloc(sizeof(Node));
L->next=NULL;
}
void tail_insert(Linklist &L)//尾插法建立链表
{
int i,j;
printf("输入要创建的链表的长度:");
scanf("%d",&i);
Node *r,*s;
r=L;
for(j=1;j<=i;j++)
{
s=(Node *)malloc(sizeof(Node));
scanf("%d",&s->data);
r->next=s;
r=s;
}
r->next=NULL;
}
void showlist(Linklist &L)//将链表输出
{
Node *p;
p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
int length(Linklist &L)//求其长度
{
Node *p;
p=L->next;
int length=0;
while(p!=NULL)
{
length++;
p=p->next;
}
return length;
}
void intersection(Linklist &LA,Linklist &LB)
{
Node *s,*p,*r;
Linklist LC;
Initlist(LC);
p=LB->next;
r=LC;
while(p!=NULL)
{
s=LA->next;
while(s!=NULL)
{
if(s->data==p->data)
{
Node *m=(Node *)malloc(sizeof(Node));
m->data=s->data;
r->next=m;
r=m;
}
else
s=s->next;
}
p=p->next;
}
r->next=NULL;
showlist(LC);
}
int main()
{
int m,n;
Linklist LA,LB;
Initlist(LA);
Initlist(LB);
tail_insert(LA);
tail_insert(LB);
showlist(LA);
printf("\n");
showlist(LB);
m=length(LA);
n=length(LB);
printf("\n");
printf("%d\n%d",m,n);
intersection(LA,LB);
}

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-03-24 23:26
    关注

    修改处见注释,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    typedef struct LNode
    {
        int    data;
        struct LNode *next;
    }Node,*Linklist;
    void Initlist(Linklist &L)//初始化链表
    {
        L=(Node*)malloc(sizeof(Node));
        L->next=NULL;
    }
    void tail_insert(Linklist &L)//尾插法建立链表
    {
        int i,j;
        printf("输入要创建的链表的长度:");
        scanf("%d",&i);
        Node *r,*s;
        r=L;
        for(j=1;j<=i;j++)
        {
           s=(Node *)malloc(sizeof(Node));
           scanf("%d",&s->data);
           r->next=s;
           r=s;
        }
        r->next=NULL;
    }
    void showlist(Linklist &L)//将链表输出
    {
        Node *p;
        p=L->next;
        while(p!=NULL)
        {
            printf("%d ",p->data);
            p=p->next;
        }
    }
    int length(Linklist &L)//求其长度
    {
        Node *p;
        p=L->next;
        int length=0;
        while(p!=NULL)
        {
            length++;
            p=p->next;
        }
        return length;
    }
    Linklist intersection(Linklist &LA,Linklist &LB)//修改
    //void intersection(Linklist &LA,Linklist &LB)
    {
        Node *s,*p,*r;
        Linklist LC;
        Initlist(LC);
        p=LB->next;
        r=LC;
        while(p!=NULL)
        {
             s=LA->next;
             while(s!=NULL)
             {
                  if(s->data==p->data)
                  {
                      Node *m=(Node *)malloc(sizeof(Node));
                      m->data=s->data;
                      r->next=m;
                      r=m;
                      break;  //修改
                  }
                  //else 修改
                  s=s->next;
             }
             p=p->next;
        }
        r->next=NULL;
        return LC;  //showlist(LC); 修改
    }
    int main()
    {
        int m,n;
        Linklist LA,LB,LC;//修改
        Initlist(LA);
        Initlist(LB);
        tail_insert(LA);
        tail_insert(LB);
        showlist(LA);
        printf("\n");
        showlist(LB);
        m=length(LA);
        n=length(LB);
        printf("\n");
        printf("%d\n%d\n",m,n);
        showlist(LC=intersection(LA,LB));//修改
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 创建了问题 3月24日

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值