如何用递归实现两个集合并集部分代码:struct Node{int numNode *next}Node *headNode *merge(Node *he
如何用递归实现两个集合并集
部分代码:struct Node
{
int num;
Node *next;
};
Node *head;
Node *merge(Node *head1,Node *head2)
{
if(head1==NULL)
return head2;
if(head2==NULL)
return head1;
Node *head=NULL;
if(head1->num<head2->num)
{
head=head1;
head->next=merge(head1->next,head2);
}
else
{
head=head2;
head->next=merge(head1,head2->next);
}
return head;
}
主要是主函数不懂怎么写,求各位指点。(如实现{1,3,5,7,9}与{2,4,6,8,10}两个集合的并集)
[解决办法]
- C/C++ code
#include<stdio.h>struct Node{ int num; Node *next;};Node *merge(Node *head1,Node *head2){ if(head1==NULL) return head2; if(head2==NULL) return head1; Node *head=NULL; if(head1->num<head2->num) { head=head1; head->next=merge(head1->next,head2); } else { head=head2; head->next=merge(head1,head2->next); } return head; }void main(){ struct Node head1[5], head2[5]; int i; for(i=1; i <= 9; i += 2) { head1[i/2].num = i; if( i != 9 ) { head1[i/2].next = &head1[i/2 + 1]; //用指针连接两个结构体 } else { head1[i/2].next = NULL; } } for(i=2; i <= 10; i += 2) { head2[(i-1)/2].num = i; if( i != 10 ) { head2[(i-1)/2].next = &head2[i/2]; } else { head2[(i-1)/2].next = NULL; } } struct Node *head; head = merge(&head1[0], &head2[0]); struct Node *p = head; while( p != NULL ) { printf("%d ", p->num); p = p->next; }}
[解决办法]
- C/C++ code
Node *get(int n){Node *p=new Node;p->num=n;p->next=0;return }int main(){int arr1[5]={1,3,5,7,9};int arr2[5]={2,4,6,8,10};Node *head,*pre=0;for(int i=0;i<5;i++){herd=merge(get(arr1[1]),pre);pre=head;}for(int i=0;i<5;i++){herd=merge(get(arr2[1]),pre);pre=head;} 