首页 > 其他分享 >合并两个有序链表

合并两个有序链表

时间:2023-06-01 11:24:20浏览次数:29  
标签:ListNode val 合并 list1 next 链表 有序 list2

 

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

 

经典算法,采用递归法就行了,别的算法也有,但有限考虑能想得到的。

每次将两个头节点值较小的链表 l1 和 l2 中的头结点合并,并返回合并后的头结点,递归地进行下去,直到其中一个链表为空,则直接返回另一个链表的头结点。

/**
 * 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) 
    {
        // 如果链表1为空
        if(list1 == nullptr)
        {
            return list2;
        }
        if(list2 == nullptr)
        {
            return list1;
        }
        // list1的值小于list2的值,则将链表1与链表2进行合并
        if(list1->val <= list2->val)
        {
            list1->next = mergeTwoLists(list1->next, list2);
            return list1;
        }else        // 如果链表2的头结点小于1的头结点,经链表2
        {
            list2->next = mergeTwoLists(list1, list2->next);
            return list2;
        }
    }
};

  

 

标签:ListNode,val,合并,list1,next,链表,有序,list2
From: https://www.cnblogs.com/Bingley-Z/p/17448423.html

相关文章

  • Git分支教程:详解分支创建、合并、删除等操作
    Git是一种强大的分布式版本控制系统,它的分支功能使得团队协作和代码管理变得更加灵活和高效。分支可以让开发人员在不影响主线开发的情况下进行并行开发和实验性工作。本篇博客将详解Git分支的创建、合并、删除等操作,帮助你更好地理解和使用Git的分支功能。分支的基本概念在开......
  • 石子合并问题
    石子合并问题是最经典的DP问题。首先它有如下3种题型:(1)有N堆石子,现要将石子有序的合并成一堆,规定如下:每次只能移动任意的2堆石子合并,合并花费为新合成的一堆石子的数量。求将这N堆石子合并成一堆的总花费最小(或最大)。分析:当然这种情况是最简单的情况,合并的是任意两堆,直接贪心即可,......
  • ffmpeg 视频截取-合并
    ffmpeg截取视频ffmpeg-ss00:00:00-i~/1.mp4-ccopy-t00:21:00out.mp4截取从00:00:00开始持续时间21分钟的视频时间被指定为HH:MM:SS.MILLISECONDS。例如,您可以告诉FFmpeg寻找01:02:03——即电影1小时的第2分钟的第3秒!-t范围您可以使用参数指定所需剪辑的持续......
  • 初级数据结构--单链表
    继昨天终于明白了成功截图typedefstructLNode{ intdata; structLNode*next;}LNode;boolIsitList(LNode**Head){ *Head=(LNode*)malloc(sizeof(LNode)); if(!*Head) returnfalse; (*Head)->next=NULL; returntrue;}voidListInsert(LNode*L,intval......
  • 2.单向链表
    1.为什么需要链表?  链表是一种灵活的数据结构,它允许在内存中动态地存储和操作元素。以下是一些需要使用链表的原因:1.动态数组的缺点:数组的大小是在程序运行时固定的,如果需要添加或删除元素,就需要重新分配内存并复制数据。这会导致大量的内存浪费和性能问题。而链表可以动态地......
  • Java并发之原子性、可见性和有序性
    1.原子性1.1原子性的定义原子性:原子性即是一个或者多个操作,要么全程执行,并且执行的过程中不被任何因素打断,要么全部不执行。举个例子会更好理解:就像是我们去银行转账的时候,A给B转1000元,如果A的账户减少了1000之后,那么B的账户一定要增加1000。A的账户减钱,B的账户加钱,这两个操作......
  • three.js 导入模型合并为一个
    导入的模型文件是个组,里面有多个模型,需要合并为一个,方便操作参考文章https://blog.csdn.net/weixin_52125363/article/details/122454894https://blog.csdn.net/u012483043/article/details/106465465/https://zhuanlan.zhihu.com/p/467005893constobjLoader=newOBJLoader()......
  • 线性链表的基本操作
    线性链表常见的操作:插入,删除,查找等等。以下采用尾插法建立的线性链表。#include<iostream>#include<string.h>#include<stdio.h>usingnamespacestd;structnode{intval;node*next;};node*head,*p,*q;voidInit(){head=newnode();q=h......
  • 石子合并(GarsiaWachs算法)
    对于石子合并问题,有一个最好的算法,那就是GarsiaWachs算法。时间复杂度为O(n^2)。它的步骤如下:设序列是stone[],从左往右,找一个满足stone[k-1]<= stone[k+1]的k,找到后合并stone[k]和stone[k-1],再从当前位置开始向左找最大的j,使其满足stone[j]> stone[k]+stone[k-1],插到j的后面就......
  • lowagie多个pdf合并成一个pdf
    <dependency><groupId>com.lowagie</groupId><artifactId>itext</artifactId><version>2.1.7</version></dependency>importcom.lowagie.text.Document;importcom.lowagie.te......