面试题:递归实现两个链表合并 不用递归如下: Node* mergeAction(Node* head1, Node* head2){//两个链表的合并操作 Node* head=(Node*)malloc(sizeof(Node)); Node* q=head; while(head1 && head2){ if(head1->data<=head2->data){ Node* p=(Node*)malloc(sizeof(Node)); p->data=head1->data; p->next=NULL; q->next=p; q=q->next; head1=head1->next; } else if(head1->data > head2->data){ Node* p=(Node*)malloc(sizeof(Node)); p->data=head2->data; p->next=NULL; q->next=p; q=q->next; head2=head2->next; } } return head->next; } L1,L2,L都是无头节点的单链表,下面程序可以实现!!! void MergeList(LinkList L1,LinkList L2,LinkList &L) {/*两个升序链表,合并成一个升序链表,要用递归做!*/ LinkList p1 = L1; LinkList p2 = L2; if(p1 && p2) { if(p1->data < p2->data) { L->next = p1; MergeList(L1->next,L2,L->next); } else { L->next = p2; MergeList(L1,L2->next,L->next); } } else if(p1) { L->next = p1; } else if(p2) { L->next = p2; } } 递归2: Node* mergAction(Node* head1,Node *head2) { Node *p=NULL; if(head1==NULL&&head2==NULL) return p; else if(head1==NULL) return head2; else if(head2==NULL) return head1; else { if(head1->data < head2->data) { p = head1; p->next = mergAction(head1->next,head2); } else { p = head2; p->next = mergAction(head1,head2->next); } return p; } }