链表学习Leetcode刷题记录(9_24)

 题目内容:将两个升序链表合并为一个升序链表并返回

例:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
输入:l1 = [], l2 = [0]
输出:[0]
  1. 一开始的想法:将list1里的每一个节点value和list2做对比,遍历,然后插入合适的位置,但发现流程复杂,还要考虑排序算法。于是看了题解
  2. 官方题解上来就给我来了个递归,初看似乎很难理解的样子,但我却发现代码只有短短几行:
    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode() : val(0), next(nullptr) {}
     *     ListNode(int x) : val(x), next(nullptr) {}
     *     ListNode(int x, ListNode *next) : val(x), next(next) {}
     * };
     */
    class Solution {
    public:
        ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
            if(!list1)
            {
                return list2;
            }
            else if(!list2)
            {
                return list1;
            }
            else if(list1->val<list2->val)
            {
                list1->next = mergeTwoLists(list1->next, list2);
                return list1;
            }
            else
            {
                list2->next = mergeTwoLists(list1, list2->next);
                return list2;
            }
        }
    };

    前面两句还好,如果1空,那么返回2,如果2空,那么返回1;精髓在于递归。

  3. 关键在于递归,通过比较l1和l2结点的大小,将函数递归,赋值给连接的next从而避免了麻烦的for循环,函数自己直接进行了大小的排序和合并。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值