链表的题好难,有人可以帮一下刚入大学的我吗

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

输入描述

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

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

可以参考如下链接:
https://blog.csdn.net/m0_47210241/article/details/108459247
解决思路和代码都在链接中,我就不重述了。

如果对你有帮助,可以给我个采纳吗,谢谢!! 点击我这个回答右上方的【采纳】按钮

typedef struct _Node
{
    int data;
    _Node *next;
}NODE;

NODE * create(NODE *s)
{
    int n;
    scanf("%d",&n);
    NODE *q = s;
    while(n != -1)
    {
        NODE *p = (NODE*)malloc(sizeof(NODE));
        p->data = n;
        p->next = NULL;
        if(s == NULL)
            s = p;
        else
            q->next = p;
        q = p;
        scanf("%d",&n);
    }
    return s;
}

NODE *insertNode(NODE *s1,NODE *s)
{
    if(s1 == NULL)
        return s;
    if(s->data <= s1->data)
    {
        s->next = s1;
        return s;
    }
    NODE *q = s1;
    NODE *p = q->next;
    while(p != NULL)
    {
        if(s->data <= p->data)
        {
            s->next = p;
            q->next = s;
            return s1;
        }
        else
        {
            q = p;
            p = p->next;
        }
    }
    p->next = s;
    return s1;
}

NODE* uNode(NODE *s1,NODE *s2)
{
    NODE *p = s2;
    NODE *q = NULL;
    while(p != NULL)
    {
        q = p->next;
        s1 = insertNode(s1,p);
        p = q;
    }
    return s1;
}

int main()
{
    NODE *s1 = NULL,*s2 = NULL;
    printf("请输入第一个链表节点(-1表示结束):");
    s1 = create(s1);
    printf("请输入第二个链表节点(-1表示结束):");
    s2 = create(s2);
    NODE *s3 = uNode(s1,s2);
    if(s3 == NULL)
        printf("NULL\n");
    else
    {
        NODE *p = s3;
        while(p != NULL)
        {
            if(p->next != NULL)
                printf("%d ",p->data);
            else
                printf("%d\n",p->data);
            p = p->next;
        }
    }
    system("pause");
    return 0;
}