原题链接
这道题最重要的其实是中位数的选取,其中最快的方法应该是同时比较两个链表,比到那个需要输出的那个中位数直接输出。
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
struct node* next;
int data;
}lnode;
void init(lnode **l){
(*l)=(lnode *)malloc(sizeof(lnode));
(*l)->next=NULL;
}
lnode* insert(lnode *l,lnode *p,int a){
lnode *q;
q=(lnode *)malloc(sizeof(lnode));
q->next=NULL;
q->data=a;
p->next=q;
return q;
}
void hb(lnode *l1,lnode *l2,int n){
lnode *p1=l1->next,*p2=l2->next;
int i=0,a;
while(p1!=NULL && p2!=NULL){
if(p1->data<p2->data){
a=p1->data;
p1=p1->next;
i++;
}else{
a=p2->data;
p2=p2->next;
i++;
}
if(i==n){
printf("%d",a);
break;
}
}
}
int main(){
lnode *l1,*l2,*l3,*p;
init(&l1);
init(&l2);
init(&l3);
p=l1;
int i,a,n;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a);
p=insert(l1,p,a);
}
p=l2;
for(i=0;i<n;i++){
scanf("%d",&a);
p=insert(l2,p,a);
}
hb(l1,l2,n);
}