• 2021-08-01 刷题 合并两个有序链表


    题目链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/

    题目说明:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

    题目示例:示例 1:

    输入:l1 = [1,2,4], l2 = [1,3,4]
    输出:[1,1,2,3,4,4]

    示例 2:

    输入:l1 = [], l2 = []
    输出:[]

    示例 3:

    输入:l1 = [], l2 = [0]
    输出:[0]


    题目思路:

     如上,力扣平台已经给出了函数方法,可以使用递归的思想与非递归的思想进行解决

    非递归思想:

    1、创建虚拟头结点与指向头结点的指针

    2、进行判断链表是否为空,l1 为空怎么解决,l2为空怎么解决,l1、l2都不为空怎么解决

    3、l1 l2 都不为空时 需要对链表里的变量进行判断,若l1.val < l2.val  需要将p指针指向l1、l1指针指向下一个变量

    代码:

    class Solution {
    public:
        ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
            //非递归做法
            ListNode * head = new ListNode(0);//链表都有虚拟的头结点,定义虚拟的头结点
            ListNode *p = head;//定义一个listnode类型的指针,并指向头结点
            //1、首先判断两个链表是否为空,都不为空时
            while(l1 && l2 ){
                //2、判断l1 与 l2 的值 l1 l2 为两个指针,从0开始索引
                    if(l2->val > l1->val)
                    {
                        p->next = l1;
                        l1=l1->next;
                    }
                    else
                    {
                        p->next = l2;
                        l2=l2->next;
                    }
                    //存入数值后,将值往后移动一位
                    p=p->next;
            }
            //当有L1或者L2为空时,直接将另一个链表中剩下的数存入p的尾部
            if(l1 !=nullptr)
            {
                p->next=l1;
            }
            if(l2 !=nullptr){
                p->next=l2;
            }
            return head->next;
        }
    };

    递归代码:

       public ListNode mergeTwoLists(ListNode l1, ListNode l2){
            if(l1 == null){
                return l2;
            }
            if(l2 == null){
                return l1;
            }
            if(l1->val < l2->val){
                l1->next = mergeTwoLists(l1->next,l2);
                return l1;
            }else{
                l2->next = mergeTwoLists(l1,l2->next);
                return l2;
            }
            
        }
    }
  • 相关阅读:
    FreeRTOS 动态内存管理
    NODE.JS之我见
    Maven使用详解
    WPF依赖属性详解
    对比MFC资源文件谈谈WPF布局方式
    MAPPING SEGMENTS TO PAGES
    只用一行代码让你的ASP.NET MVC 跑起来
    WPF The Hard Way
    Java判断回文数算法简单实现
    2014让我受益最大的那些书--别找了,都在这里
  • 原文地址:https://www.cnblogs.com/gjianli/p/15086842.html
Copyright © 2020-2023  润新知