7-1 两个有序链表序列的交集 (100 分)

7-1 两个有序链表序列的交集 (100 分)
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。
输入样例:
1 2 5 -1
2 4 5 8 10 -1

输出样例:
2 5

输入可能的情况:如果两个链表都没有数字其中一个链表有数字,另一个链表没有数字,那么直接输出NULL

分块
创建链表
建立新的链表
输出

大规模数据错误

我的代码
#include
#include
typedef struct Node1{
int val;
struct Node1 next;
}Node;
Node
create(int *n);
void Print(Node L);
Node
search(Node *l1,Node *l2,int n1,int n2);
int main()
{
int N1=0,N2=0;
int *n1=&N1,*n2=&N2;
Node *L,*l1,l2;
l1=create(n1);
l2=create(n2);
//printf("%d",N1);
//Print(l1);
L=search(l1,l2,N1,N2);
if(L==NULL){
printf(“NULL”);
}else{
Print(L);
}
}
Node
create(int *n)
{
//遇到-1则停止输入
Node *L,head,temp;
L=(Node
)malloc(sizeof(Node));
L->next=NULL;
head=L;
int num;
scanf("%d",&num);
while(num!=-1){
temp=(Node
)malloc(sizeof(Node));
temp->next=NULL;
temp->val=num;
L->next=temp;
L=temp;
scanf("%d",&num);
(*n)++;
}
//注意链表是NULL的情况
return head->next;
}
void Print(Node *L)
{
Node head;
head=L;
while(L!=NULL){
printf("%d",L->val);
L=L->next;
if(L!=NULL){
printf(" ");
}
}
free(head);
}
Node
search(Node *l1,Node *l2,int n1,int n2)
{
Node *L,*temp,head,p1,p2;
L=(Node
)malloc(sizeof(Node));
L->next=NULL;
head=L;
p1=l1;
p2=l2;
//printf("");
if(l1NULL||l2NULL){
return NULL;
//printf("
");
}
if(n1>n2){
while(l1!=NULL){
l2=p2;
while(l2!=NULL){
if(l1->val==l2->val){
temp=(Node
)malloc(sizeof(Node));
temp->next=NULL;
temp->val=l1->val;
L->next=temp;
L=temp;
//printf("%d",L->val);
break;
}
l2=l2->next;
}
l1=l1->next;
}
}else{
while(l2!=NULL){
l1=p1;
while(l1!=NULL){
if(l1->val==l2->val){
temp=(Node
)malloc(sizeof(Node));
temp->next=NULL;
temp->val=l2->val;
L->next=temp;
L=temp;
//printf("%d",L->val);
break;
}
l1=l1->next;
}
l2=l2->next;
}
}
return head->next;
}

你可能感兴趣的:(pta)