以前gx同学问的某某公司的笔试题,写一下练练(纯手写,没编译过),我也要找工作,准备一下笔试了:
typedef struct Node { int data; struct Node *next; }Node; Node * merge(Node *pa,Node *pb){ Node *header; Node *p1; Node *p2; Node *p = pa; Node *q = pb; header = (Node *)malloc(sizeof(Node)); header->next = NULL; Node *tail = header; while(p != NULL && q != NULL){ p1 = p,p2 = q; if(p1->data < p2->data){ tail->next = p1; p = p1->next; p1->next = NULL; }else{ tail->next = p2; q = p2->next; p2->next = NULL; } tail = tail->next; } if(p != NULL){ tail->next = p; } if(q != NULL){ tail->next = q; } return header; }
gx上次开始让我给写这个,结果他笔试的时候居然让写个递归的:
void merge(Node *tail,Node *pa,Node *pb){
Node *p = NULL;
if(pa != NULL && pb != NULL){
if(pa->data < pb->data){
tail->next = pa;
p = pa->next;
pa->next = NULL;
merge(pa,p,pb);
}else{
tail->next = pb;
p = pb->next;
pb->next = NULL;
merge(pb,pa,p);
}
}
if(pa == NULL)
tail->next = pb;
if(pb == NULL)
tail->next = pa;
}