【算法】链表:21.合并两个有序链表(easy)

news/2024/10/4 6:32:43/

 系列专栏

《分治》

《模拟》

《Linux》


目录

1、题目链接

2、题目介绍

3、解法(双指针)

4、代码 


1、题目链接

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

2、题目介绍

3、解法(双指针)

推荐一篇题解题解 - 力扣(LeetCode)

  1. 解决方法
    • 使用一个伪头节点来简化边界条件的处理,特别是在插入第一个节点时。这避免了处理空链表或只有一个元素的特殊情况。
    • 使用一个指针 tmp 来遍历新链表,并始终保持它指向新链表的最后一个节点,以便于进行尾插操作。
    • 遍历两个给定的链表 list1 和 list2,比较当前节点的值,将较小的节点插入到新链表中,并移动相应链表的指针到下一个节点。
    • 当其中一个链表遍历完毕后,将另一个链表剩余的节点直接连接到新链表的末尾。
  2. 代码实现
    • 初始化伪头节点 head 和临时指针 tmp
    • 使用 while 循环遍历两个链表,直到其中一个链表为空。
      • 在循环内部,比较 list1 和 list2 当前节点的值。
      • 将值较小的节点插入到新链表中(即设置 tmp->next),并移动对应链表的指针。
      • 移动 tmp 指针到新链表的最后一个节点。
    • 使用两个额外的 while 循环来处理剩余的链表(如果有的话)。由于已经遍历过两个链表的一部分或全部,这两个循环中至多有一个会执行。
      • 这两个循环的目的是将剩余链表的所有节点连接到新链表的末尾。
    • 返回新链表的头节点(即 head->next,因为 head 是一个伪头节点)。细节很重要!!!

4、代码 

class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {ListNode* head = new ListNode(0);//初始化伪头节点,便于遍历和返回ListNode* tmp = head;//在新链表中,指向最后一个结点,便于实现尾插while (list1 != nullptr && list2 != nullptr){if (list1->val < list2->val){tmp->next = list1;list1 = list1->next;}else {tmp->next = list2;list2 = list2->next;}tmp = tmp->next;}//tmp->next = list1 != nullptr ? list1 : list2;while (list1 != NULL){tmp->next = list1;list1 = list1->next;tmp = tmp->next;}while (list2 != NULL){tmp->next = list2;list2 = list2->next;tmp = tmp->next;}return head->next;//返回真正的头节点}};

 


💗感谢阅读!💗


http://www.ppmy.cn/news/1533455.html

相关文章

前端工程化17-邂逅原生的ajax、跨域、JSONP

5、邂逅原生的ajax 5.1、什么是ajax AJAX 全称为Asynchronous Javascript And XML&#xff0c;就是异步的 JS 和 XML。通过AJAX可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;页面无刷新获取数据。AJAX 不是新的编程语言&#xff0c;而是一种将现有的…

docker零基础入门教程

注意 本系列文章已升级、转移至我的自建站点中&#xff0c;本章原文为&#xff1a;Docker入门 目录 注意1.前言2.docker安装3.docker基本使用4.打包docker镜像5.docker进阶 1.前言 如果你长期写C/C代码&#xff0c;那你应该很容易发现C/C开源项目存在的一个严重问题&#xff…

查缺补漏----程序查询方式和中断方式计算题

1.程序查询方式 总结下来就是&#xff1a; 必须在外设传输完端口大小的数据时访问端口&#xff0c;以防止数据未被及时读出而丢失。 占CPU总时间&#xff1a;就是某段时间内设备用了多少时钟周期/PCU有多少个时钟周期 CPU的时钟周期数&#xff1a;就看主频&#xff0c;主频表示…

【html】基础(二)

本专栏内容为&#xff1a;前端专栏 记录学习前端&#xff0c;分为若干个子专栏&#xff0c;html js css vue等 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;js专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &am…

JavaScript 可视化案例 D3.js Chart.js 使用教程 图表实现 柱状图 饼状图 条形图 折现图等

JavaScript 可视化通常用于将数据以图形方式展示&#xff0c;以下是使用D3.js 和 Chart.js 这两种常用库进行可视化的案例。 案例一&#xff1a;使用 D3.js 实现条形图 1. 引入 D3.js 首先&#xff0c;需要在 HTML 中引入 D3.js&#xff1a; <!DOCTYPE html> <htm…

【CKA】五、网络策略–NetworkPolicy

5、配置网络策略–NetworkPolicy 1. 考题内容&#xff1a; 2. 答题思路&#xff1a; 1、根据题目分析要创建怎样的网络策略 2、按题目要求查看ns corp-net的label 3、编写yaml&#xff0c;其中注意 namespace、label、port 3. 官网地址&#xff1a; https://kubernetes.io/…

经典文献阅读之--WiROS(用于机器人的WiFi感知工具箱)

0. 简介 近期的许多研究探索了使用基于WiFi的感知技术来改善SLAM&#xff08;同时定位与地图构建&#xff09;、机器人操控或探索。此外&#xff0c;WiFi的广泛可用性使其成为最具优势的射频信号。但WiFi传感器缺乏一个准确、易处理、多功能的工具箱&#xff0c;这限制了它们与…

使用Chrome浏览器时打开网页如何禁用缓存

缓存是浏览器用于临时存储网页资源的一种机制&#xff0c;可以提高网页加载速度和减轻服务器负载。 然而&#xff0c;有时候我们需要阻止缓存中的Chrome浏览器&#xff0c;以便获取最新的网页内容。以下是一些方法可以实现这个目标&#xff1a; 1、强制刷新页面&#xff1a;在C…