华师复试C++ 递归合并两个有序单链表(2019第三题)

题目

在这里插入图片描述

分析

注意,题目要求用递归的方式合并链表!
我们来考虑下面两个单链表的合并
在这里插入图片描述
我们有一个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;
    }
};
发布了17 篇原创文章 · 获赞 6 · 访问量 638

猜你喜欢

转载自blog.csdn.net/weixin_36979214/article/details/104316418