【LeetCode剑指offer 03】合并两个/K个排序链表
合并两个排序链表
https://leetcode.cn/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000
思路
代码
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
//两个指针遍历链表,比较,不断把小的那个接到新链表的后面
//定义dummy,新链表头节点指向dummy
ListNode* dummy = new ListNode(0);
ListNode* cur = dummy;
while(l1 != NULL && l2 != NULL){//当两链表指针都不为空
if(l1->val < l2->val){
cur->next = l1;
l1 = l1->next;
}else{//大于等于的情况
cur->next = l2;
l2 = l2->next;
}
cur = cur->next;
}
cur->next = l1 != NULL ? l1 : l2;//遍历到最后谁不为空就以谁为结尾
return dummy->next;
}
};
合并K个升序链表
https://leetcode.cn/problems/merge-k-sorted-lists
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
示例 1:
输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
1->4->5,
1->3->4,
2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6
示例 2:
输入:lists = []
输出:[]
示例 3:
输入:lists = [[]]
输出:[]
思路
在合并两个链表的基础上改一下就行
定义一个节点指向空指针,用于充当合成后链表的头节点
遍历所给的链表数组,不断调用合并两个链表时的函数即可
代码
class Solution {
private:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
//两个指针遍历链表,比较,不断把小的那个接到新链表的后面
//定义dummy,新链表头节点指向dummy
ListNode* dummy = new ListNode(0);
ListNode* cur = dummy;
while(l1 != NULL && l2 != NULL){//当两链表指针都不为空
if(l1->val < l2->val){
cur->next = l1;
l1 = l1->next;
}else{//大于等于的情况
cur->next = l2;
l2 = l2->next;
}
cur = cur->next;
}
cur->next = l1 != NULL ? l1 : l2;//遍历到最后谁不为空就以谁为结尾
return dummy->next;
}
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
//创建合并链表的头节点
ListNode* head = nullptr;//注意,这里不能用ListNode* head = new ListNode();来初始化
//上述初始化方式会将head指向一个值为0,next为nulptr的节点对象,而我们希望head初始化并且不指向任何对象
for(int i = 0; i < lists.size(); ++i){
head = mergeTwoLists(head, lists[i]);
}
return head;
}
};
ListNode* head = nullptr;和ListNode* head = new ListNode();有什么区别?
ListNode* head = nullptr;定义了一个指针 head,并将其初始化为空指针。此时 head 不指向任何一个节点,即它的值为 nullptr。
ListNode* head = new ListNode();定义了一个指针 head,并通过new运算符分配了内存来创建一个新的 ListNode 节点。此时 head 指向这个新节点的地址。该节点的值可能是随机的,取决于默认构造函数中的初始化。总之,两者的区别是一个指针被初始化为空指针,而另一个指针被初始化为指向一个新节点。
【LeetCode剑指offer 03】合并两个/K个排序链表的更多相关文章
- 【剑指Offer】合并两个排序的链表 解题报告(Python)
[剑指Offer]合并两个排序的链表 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interview ...
- 《剑指offer》 合并两个排序的链表
本题来自<剑指offer> 合并两个排序的链表 题目: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路: A:采用递归的方式(C++ C ...
- 剑指Offer:合并两个排序的链表【25】
剑指Offer:合并两个排序的链表[25] 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目分析 每次都是比较箭头节点,把小节点连接到已经合 ...
- 剑指 Offer 25. 合并两个排序的链表
剑指 Offer 25. 合并两个排序的链表 Offer 25 该问题的原型就是多项式的合并. 实现较简单,没有特殊需要注意的问题. package com.walegarrett.offer; /* ...
- 【Java】 剑指offer(25) 合并两个排序的链表
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照 ...
- Go语言实现:【剑指offer】合并两个排序的链表
该题目来源于牛客网<剑指offer>专题. 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. Go语言实现: //递归 func merge(l ...
- 剑指Offer 16. 合并两个排序的链表 (链表)
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目地址 https://www.nowcoder.com/practice/d8b6b4358 ...
- 【剑指offer】合并两有序单链表
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25739727 九度OJ上AC,採用归并的思想递归实现. 题目描写叙述: 输入两个单调递增的 ...
- 《剑指offer》合并两个排序的链表
一.题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 二.输入描述 两个递增排序的链表 三.输出描述 合并成一个递增排序的链表 四.牛客网提供的框 ...
- 剑指offer——25合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题解: 使用普通方法,或者递归,注意新的头节点即可. //使用普通的合并方法 class S ...
随机推荐
- 【转帖】奇淫技巧 | route命令设置网络优先级
奇淫技巧 | route命令设置网络优先级 https://blog.csdn.net/DynmicResource/article/details/120134745 1. 背景 在生活中的会经常遇 ...
- MySQL知识点总结(完整版)
MySQL学习笔记 登录和退出MySQL服务器 # 登录MySQL $ mysql -u root -p12345612 # 退出MySQL数据库服务器 exit; 基本语法 -- 显示所有数据库 s ...
- 【深度学习项目三】ResNet50多分类任务【十二生肖分类】
相关文章: [深度学习项目一]全连接神经网络实现mnist数字识别 [深度学习项目二]卷积神经网络LeNet实现minst数字识别 [深度学习项目三]ResNet50多分类任务[十二生肖分类] 『深度 ...
- 【分享】从Mybatis源码中,学习到的10种设计模式
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言:小镇卷码家 总有不少研发伙伴问小傅哥:"为什么学设计模式.看框架源码.补技 ...
- PBKDF2算法:保护密码安全的重要工具
摘要:在当今的数字世界中,密码安全是至关重要的.为了保护用户密码免受未经授权的访问和破解,Password-Based Key Derivation Function 2 (PBKDF2)算法成为了一 ...
- Linux NFS挂载报错wrong fs type, bad option, bad superblock
1.故障现象 2.解决方案 1.故障现象 我的测试环境有一个NAS,之前配置都是按照测试需求在/etc/fstab里添加配置挂载选项: vi /etc/fstab 192.168.1.2:/mnt/H ...
- 蓝鲸:主机频繁提示“You have new mail in /var/spool/mail/root” 定位解决
前些天安装蓝鲸的测试环境频繁出现You have new mail in /var/spool/mail/root,查看发现是/usr/local/gse/agent/bin/gsectl: line ...
- Java 封装、继承、多态的理解
更好的阅读体验:Java 封装.继承.多态的理解 1.封装 封装:就是隐藏对象的属性和实现细节,仅对外提供公共访问方式.让使用者知道的才暴露出来,不需要让使用者知道的全部隐藏起来 封装的好处:避免使用 ...
- RFID EPC Class1 Gen2电子标签笔记
RFID EPC Class1 Gen2 符合EPC Class1 Gen2(简称G2)协议V109版的电子标签(Tag)和读写器(Reader)应该具有下述的特性 标签存储器分区 Tag memor ...
- Ubuntu18.04 Server安装Harbor
Harbor是一个开源的本地部署的容器镜像注册中心, 带访问权限控制, 以及管理界面. 作用类似于Java中Maven的私有仓库Nexus, 用于配合Jenkins在部署容器到K8s时提供镜像源, 加 ...