以前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;
}
576

被折叠的 条评论
为什么被折叠?



