当前位置: 首页 > news >正文

21. 合并两个有序链表【 力扣(LeetCode) 】

一、题目描述

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

二、测试用例

示例 1:

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

示例 2:

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

示例 3:

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

提示:

两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列

三、解题思路

  1. 基本思路:
      正常的合并排序,注意结点的拼接和空链表的情况即可
  2. 具体思路:
    • 定义:指针 l1 ,l2 用于遍历两个链表;指针 ans 用于存放答案;指针 head 用于遍历答案;
    • 合并排序:遍历两个链表,
      • 如果 l1 的值小于 l2 :表示要存的结点是 l1 ,将 l1 存到 head 的下一个结点中,l1 后移;
      • 如果 l1 的值大于等于 l2 :表示要存的结点是 q ,表示要存的结点是 l2 ,将 l2 存到 head 的下一个结点中,l2 后移;
      • head 后移
    • 将最后剩余的非空链表拼接到 head 的下一个结点中。
    • 释放头指针的空间并返回结果 ans 。【头结点表示头指针,不存入任何值,而结果不要头指针】

四、参考代码

时间复杂度: O ( n ) \Omicron(n) O(n)
空间复杂度: O ( 1 ) \Omicron(1) O(1)

/*** 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) {ListNode *ans=new ListNode(),*head=ans,*l1=list1,*l2=list2;while(l1!=nullptr&&l2!=nullptr){if(l1->val<l2->val){head->next=l1;l1=l1->next;}else{head->next=l2;l2=l2->next;}head=head->next;}head->next=(l1!=nullptr)?l1:l2;head=ans;ans=ans->next;delete head;return ans;}
};

http://www.mrgr.cn/news/21959.html

相关文章:

  • 项目实战系列三: 家居购项目 第四部分
  • LabVIEW程序员是怎样成长为大佬
  • 跨系统环境下LabVIEW程序稳定运行
  • 农场管理系统小程序的设计
  • 包机制,javadoc生成文档,用户交互scanner
  • 发现 Unstructured 的 “TensorrtExecutionProvider“ 比 “CUDAExecutionProvider“ 慢
  • flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志
  • 【2.1 深度学习中的感知机是什么】
  • AI模型:到底是追求全能还是要追求专精?这是一个问题
  • Exchange 服务器地址列表的配置方法与注意事项
  • 唯徳知识产权产权系统存在任意文件读取漏洞
  • FastGPT自定义插件的icon
  • 机器学习1——手把手教你用Python跑一个线性回归模型
  • Class对象和静态方法
  • 【高等代数笔记】线性空间(一到四)
  • 【C++ Primer Plus习题】12.2
  • 【Linux 从基础到进阶】 常用 Shell 脚本示例解析
  • C++可以被重载的操作符Overloadable operators
  • 【mysql】mysql之主从延迟复制测试场景
  • 大学新生的学习秘诀:如何学习编程?(文末赠书)