想请教大佬们一个问题 这段代码哪里有问题呀 PTA上的题目
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL
输入样例:
1 2 5 -1
2 4 5 8 10 -1
输出样例:
2 5
--------------------------------------------------------------
以下是我的代码,求大佬们看一下吧:
#include <stdio.h>
#include <stdlib.h>
typedef struct LinkList{
int data;
struct LinkList*next;
}LNode;
int main()
{
LNode *L1,*L2,*L3;
LNode *p,*q,*s;
LNode *j,*k,*m;
int i;
L1=(LNode*)malloc(sizeof(LNode));
L2=(LNode*)malloc(sizeof(LNode));
L3=(LNode*)malloc(sizeof(LNode));
L1->next=NULL;
L2->next = NULL;
L3->next = NULL;
j=L1;
while(scanf("%d",&i)&&i!=-1)
{
p=(LNode*)malloc(sizeof(LNode));
p->data=i;
p->next=j->next;
j->next=p;
j=p;
}
k=L2;
while(scanf("%d",&i)&&i!=-1)
{
q=(LNode*)malloc(sizeof(LNode));
q->data=i;
q->next=k->next;
k->next=q;
k=q;
}
p=L1->next;
q=L2->next;
m=L3;
while((p!=NULL)&&(q!=NULL))
{
if((p->data)<(q->data))
p=p->next;
else if((p->data)>(q->data))
{
q=q->next;
}
else if((p->data)==(q->data))
{
s=(LNode*)malloc(sizeof(LNode));
s->data=p->data;
s->next=m->next;
m->next=s;
m= m->next;
p = p->next;
q = q->next;
}
m=L3->next;
if(L3->next==NULL)
{ printf("NULL");return 0;}
while(m!=NULL)
{
if(m->next==NULL)
printf("%d",m->data);
else
printf("%d ",m->data);
m=m->next;
}
return 0;
}
}
最近才开始学数据结构,有一些地方还没写熟练,求大佬指正