想要成为社畜的大学生 2023-10-25 17:39 采纳率: 83.3%
浏览 6
已结题

关于#数据结构#的问题:通过前半部分的代码创建了两个链表,想通过后半部分的代码打印出两个链表的交集(语言-c语言)

#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
    int date;
    struct LNode*next;
}LNode,*LinkList;

LinkList H,r,p;
LinkList listA(){
    int n;
    H=(LinkList)malloc(sizeof(LNode));
    H->next=NULL;
    r=H;
    printf("请输入A表节点数");
        scanf("%d",&n);
    for ( int i = 0; i < n; i++)
    {
        p=(LinkList)malloc(sizeof(LNode));
        printf("在输入A节点数据");
        scanf("%d",&p->date);
        r->next=p;
        r=p;
    }
    r->next=NULL;
    return H;
}
LinkList z,x,c;
LinkList listB(){
    int n;
    z=(LinkList)malloc(sizeof(LNode));
    z->next=NULL;
    x=z;
    printf("请输入B表节点数");
        scanf("%d",&n);
    for ( int i =0; i < n; i++)
    {
        c=(LinkList)malloc(sizeof(LNode));
        printf("在输入B节点数据");
        scanf("%d",&c->date);
        x->next=c;
        x=c;
    }
    x->next=NULL;
    return z;
}

int main()
{
    LinkList golistA=listA();
    LinkList pa=golistA;
    printf("表A的的值为:");
    while (pa != NULL) 
    {
        printf("%d ", pa->date);
        pa = pa->next;
    }
    printf("%n");
    LinkList golistB=listB();
    LinkList pb=golistB;
    printf("\n");
    printf("\n");
    printf("表B的值为:");
    while (pb != NULL) 
    {
        printf("%d ", pb->date);
        pb = pb->next;
    }
    struct LNode *j,*k,*m,*n;
    j=golistA->date;
    golistA->next=NULL;
    k=golistB->next;
    m=golistA->next;
    while (j&&k)
    {if (j->date==k->date)
    {m->date=j->date;
    m->next=NULL;
    m=m->next;
    j=j->next;
    k=k->next;
    }
    else if (j->date<k->date)
    {
        j=j->next;
    }else k=k->next;
    }
    free(m);
    m=golistA->next;
    while (m->next!=NULL)
    {if (m->date=m->next->date)
    {n=m->next;
    m->next=m->next->next;
        free(n);
    }
    else
    m=m->next;
    free(pa);
    pa=golistA;
    printf("交集是:");
    while (pa != NULL) {
        printf("%d ", pa->date);
        pa = pa->next;
    }
    printf("\n");
    return 0;
    }
    return 0;
}    

通过前半部分的代码创建了两个链表,想通过后半部分的代码打印出两个链表的交集,但不知道为什么报错了

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-25 21:00
    关注

    【以下回答由 GPT 生成】

    我想要优化的部分是打印链表交集的函数printIntersection。目前的实现方式是使用两个指针分别遍历两个链表,并比较节点值来找到交集。这种方法的时间复杂度为O(n+m),其中n和m分别是两个链表的长度。虽然这种方法已经是最优解,但还是有一些可以优化的地方。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月6日
  • 已采纳回答 3月29日
  • 创建了问题 10月25日

悬赏问题

  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
  • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
  • ¥15 栅极驱动低侧烧毁MOSFET
  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错
  • ¥50 F1C100S下的红外解码IR_RX驱动问题