池啾 2023-04-17 20:36 采纳率: 76.3%
浏览 57
已结题

c语言两个单链表的交集

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
using namespace std;
typedef struct LinkNode
{
    int data;
    struct LinkNode *next;
}LinkNode;
void InitList(LinkNode *&L)
{
    L=(LinkNode*)malloc(sizeof(LinkNode));
    L->next=NULL;
}
void CreatList(LinkNode *&L,int a[],int n)
{
    LinkNode *p;
    L=(LinkNode*)malloc(sizeof(LinkNode));
    L->next=NULL;
    for (int i=0;i<n-1;i++)
    {
        p=(LinkNode*)malloc(sizeof(LinkNode));
        p->data=a[i];
        p->next=L->next;
        L->next=p;
    }

}
void DisList1(LinkNode *L)
{
    LinkNode *p=L->next;
    printf("L1->");
    while(p!=NULL)
    {
        printf("\t%d",p->data);
        p=p->next;
    }
    printf("\n");
}
void DisList2(LinkNode *L)
{
    LinkNode *p=L->next;
    printf("L2->");
    while(p!=NULL)
    {
        printf("\t%d",p->data);
        p=p->next;
    }
    printf("\n");
}
void sort(LinkNode *&L)
{
    LinkNode *p,*pre,*q;
    p=L->next->next;
    L->next->next=NULL;
    while(p!=NULL)
    {
        q=p->next;
        pre=L;
        while(pre->next!=NULL&&pre->next->data<p->data)
        {
            pre=pre->next;
        }
        p->next=pre->next;
        pre->next=p;
        p=q;
    }
}
void connect(LinkNode *L1,LinkNode *L2)
{
    LinkNode *L3;
    L3=(LinkNode*)malloc(sizeof(LinkNode));
    LinkNode *s=L3->next;
    LinkNode *p=L1->next;
    while(p!=NULL)
    {
        int flag=0;
        LinkNode *q=L2;
        while(q!=NULL)
        {
            if(p->data==q->data)
            {
                flag=1;
                break;
            }
            q=q->next;
        }
        if(flag==1)
        {
            s->data=p->data;
            s=s->next;
        }
        p=p->next;
    }
    printf("L4->");
    LinkNode *pre;
    pre=L3->next;
    while(pre!=NULL)
    {
        printf("%d\t",pre->data);
        pre=pre->next;
    }

}
int main()
{
    LinkNode *L1,*L2,*L3;
    int a[100],b[100];
    int m=0,n=0;
    char c=' ';
    char d=' ';
    while(c!='\n')
    {
        scanf("%d",&a[m]);
        c=getchar();
        m++;
    }
    while(d!='\n')
    {
        scanf("%d",&b[n]);
        d=getchar();
        n++;
    }
    CreatList(L1,a,m);
    CreatList(L2,b,n);
    sort(*&L1);
    sort(*&L2);
    DisList1(L1);
    DisList2(L2);
    connect(L1,L2);

求交集的函数是connect函数,调试了好多遍都还是不行,累觉不爱,请各位神仙帮帮我,到底是哪里出错了?万般感恩。

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-04-18 15:32
    关注

    修改如下,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    using namespace std;
    typedef struct LinkNode
    {
        int data;
        struct LinkNode* next;
    }LinkNode;
    void InitList(LinkNode*& L)
    {
        L = (LinkNode*)malloc(sizeof(LinkNode));
        L->next = NULL;
    }
    void CreatList(LinkNode*& L, int a[], int n)
    {
        LinkNode* p;
        L = (LinkNode*)malloc(sizeof(LinkNode));
        L->next = NULL;
        for (int i = 0; i < n; i++)//for (int i = 0; i < n - 1; i++) 修改
        {
            p = (LinkNode*)malloc(sizeof(LinkNode));
            p->data = a[i];
            p->next = L->next;
            L->next = p;
        }
    }
    void DisList1(LinkNode* L)
    {
        LinkNode* p = NULL;   
        if (!L || !L->next)     //修改
            printf("NULL");
        else {
            p = L->next;
            while (p != NULL)
            {
                printf(" %d", p->data);
                p = p->next;
            }
        }
        printf("\n");
    }
    
    void sort(LinkNode*& L)
    {
        LinkNode* p, * pre, * q;
        if (!L || !L->next)       //修改
            return;               //修改
        p = L->next->next;
        L->next->next = NULL;
        while (p != NULL)
        {
            q = p->next;
            pre = L;
            while (pre->next != NULL && pre->next->data < p->data)
            {
                pre = pre->next;
            }
            p->next = pre->next;
            pre->next = p;
            p = q;
        }
    }
    void connect(LinkNode* L1, LinkNode* L2)
    {
        LinkNode* L3;
        L3 = (LinkNode*)malloc(sizeof(LinkNode));
        L3->next = NULL;             // 修改
        LinkNode* s = L3;
        LinkNode* p = L1->next;
        while (p != NULL)
        {
            int flag = 0;
            LinkNode* q = L2->next;//修改
            while (q != NULL)
            {
                if (p->data == q->data)
                {
                    flag = 1;
                    break;
                }
                q = q->next;
            }
            if (flag == 1)
            {
                LinkNode* pt = (LinkNode*)malloc(sizeof(LinkNode)); //修改
                pt->next = NULL;                                    //修改
                pt->data = p->data;                                 //修改
                s->next = pt;
                s = s->next;
            }
            p = p->next;
        }
        printf("L3->");  DisList1(L3);  // 修改
        //LinkNode* pre;
        //pre = L3->next;
        //while (pre != NULL)
        //{
        //    printf("%d\t", pre->data);
        //    pre = pre->next;
        //}
    }
    int main()
    {
        LinkNode* L1, * L2, * L3;
        int a[100], b[100], ret;
        int m = 0, n = 0;
        //char c = ' ';    修改
        //char d = ' ';    修改
        while (scanf("%d", &a[m]) == 1 && a[m] != -1) m++;  // 输入 -1 时,结束输入  修改
        while (scanf("%d", &b[n]) == 1 && b[n] != -1) n++;  // 输入 -1 时,结束输入  修改
        CreatList(L1, a, m);
        CreatList(L2, b, n);
        sort(*&L1);
        sort(*&L2);
        printf("L1->");  DisList1(L1); //修改
        printf("L2->");  DisList1(L2); //修改
        connect(L1, L2);
    
        return 0;
    }
    
    
    //输出函数一个就够了,这个多余了。
    void DisList2(LinkNode* L)
    {
        LinkNode* p = L->next;
        printf("L2->");
        while (p != NULL)
        {
            printf(" %d", p->data);
            p = p->next;
        }
        printf("\n");
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月28日
  • 已采纳回答 4月20日
  • 创建了问题 4月17日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测