题目
分析
注意,题目要求用递归的方式合并链表!
我们来考虑下面两个单链表的合并
我们有一个merge函数 Node * merge(Node *LA, Node *LB)
考虑下面几种情况:
1、若LA == NULL,显然直接返回LB即可
2、若LB == NULL, 直接返回LA即可
3、若LA ->data < LB->data, 那么说明LA所指向的元素值比较小,应当排在前面,所以递归处理LA->next 和 LB,且递归处理结果为当前节点的下一个节点
4、若LA ->data >= LB->data, 那么说明LB所指向的元素值比较小,应当排在前面,所以递归处理LA 和 LB->next,且递归处理结果为当前节点的下一个节点
于是我们很容易就可以写出下面的代码
struct Node{
int data;
Node *next;
};
class Solution{
public:
Node* Merge(Node *LA, Node* LB){
if (LA == NULL){
return LB;
}
if (LB == NULL){
return LA;
}
Node* p = NULL;
if (LA ->data < LB->data){
p = LA;
p->next = Merge(LA->next, LB);
}else{
p = LB;
p->next = Merge(LA, LB->next);
}
return p;
}
};