已知两个非降序链表序列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;
}