1-7 两个有序链表序列的交集

已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。

输入格式:

输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。

输出格式:

在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL

输入样例:

1 2 5 -1
2 4 5 8 10 -1

输出样例:

2 5

代码(C)

/* 1-7 两个有序链表序列的交集 */
/* Asunne */
/* 2022/12/18 */
#include <stdio.h>
#include <stdlib.h>
/* 链表结点的定义 */
typedef struct Node *PtrToNode;
struct Node
{
    int data;
    PtrToNode Next;
};
typedef PtrToNode List;

/* 创建链表 */
List CreateList()
{
    List L = (List)malloc(sizeof(struct Node));
    L->Next = NULL;
    List q;
    List p = L;
    int data;
    scanf("%d", &data);
    while (data != -1)
    {
        q = (List)malloc(sizeof(struct Node));
        q->data = data;
        p->Next = q;
        p = p->Next;
        scanf("%d", &data);
    }
    p->Next = NULL;
    return L;
}

/* 求交集(实在想不到名字了,就叫在一起吧) */
List getTogether(List L1, List L2)
{
    List p = L1->Next;
    List q = L2->Next;
    List L = (List)malloc(sizeof(struct Node));
    List r = L;
    while (p && q)
    {
        if (p->data > q->data)
            q = q->Next;
        else if (p->data < q->data)
            p = p->Next;
        else
        {
            r->Next = q;
            q = q->Next;
            p = p->Next;
            r = r->Next;
        }
    }
    r->Next = NULL;
    return L;
}

/* 输出链表(带有头结点的输出) */
void printList(List L)
{
    List p = L->Next; // 先让L指向第一个有数据的单元

    while (p)
    {
        if (p->Next == NULL)
            printf("%d ", p->data);
        else
            printf("%d ", p->data);
        p = p->Next;
    }
}
int main()
{
    List L1 = CreateList();
    List L2 = CreateList();
    List L3 = getTogether(L1, L2);
    printList(L3);
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值