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

力扣 hot100 Day30

21. 合并两个有序链表

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

//自己写的
class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {if(list1 == nullptr) return list2;else if(list2 == nullptr) return list1;   ListNode * head;if(list1->val>=list2->val){head = list2;list2 = list2->next;}else{head = list1;list1 = list1->next;}ListNode * cur = head;        while(list1 && list2){if(list1->val>=list2->val){cur->next=list2;list2 = list2->next;               }else{cur->next=list1;list1 = list1->next;}cur = cur->next; }cur->next = list1 ? list1 : list2;return head;}
};

逻辑很简单,但这里写的太冗杂了,因为要记录head,需要在head赋值后用cur复制,所以第一次判断不在循环里,很难看。

//ai写的
class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {ListNode dummy(0);  // 虚拟头节点ListNode* tail = &dummy;  // 尾指针,初始指向dummywhile (list1 && list2) {if (list1->val <= list2->val) {tail->next = list1;list1 = list1->next;} else {tail->next = list2;list2 = list2->next;}tail = tail->next;}// 处理剩余部分tail->next = list1 ? list1 : list2;return dummy.next;  // 返回合并后的头节点}
};

这里用一个虚拟头节点,使得逻辑和格式简洁许多,最后返回时也能使用。

//抄的
class Solution {
public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {if (l1 == nullptr) {return l2;} else if (l2 == nullptr) {return l1;} else if (l1->val < l2->val) {l1->next = mergeTwoLists(l1->next, l2);return l1;} else {l2->next = mergeTwoLists(l1, l2->next);return l2;}}
};

递归法,挺好理解的,适合面试用(估计也很难有简单题)

http://www.xdnf.cn/news/14727.html

相关文章:

  • Hadoop WordCount 程序实现与执行指南
  • Python 数据分析与机器学习入门 (三):Pandas 数据导入与核心操作
  • 提示技术系列——链式提示
  • 现代 JavaScript (ES6+) 入门到实战(四):数组的革命 map/filter/reduce - 告别 for 循环
  • stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
  • 第二届 Parloo杯 应急响应学习——畸形的爱
  • 理解 Confluent Schema Registry:Kafka 生态中的结构化数据守护者
  • Qt事件系统
  • 机器学习在智能电网中的应用:负荷预测与能源管理
  • MySQL锁机制全解析
  • 06_注意力机制
  • Modbus 报文结构与 CRC 校验实战指南(一)
  • leetcode437-路径总和III
  • TVFEMD-CPO-TCN-BiLSTM多输入单输出模型
  • ASP.Net依赖注入!使用Microsoft.Extensions.DependencyInjection配置依赖注入
  • 【ad-hoc】# P12414 「YLLOI-R1-T3」一路向北|普及+
  • MyBatis批量删除
  • 现代 JavaScript (ES6+) 入门到实战(一):告别 var!拥抱 let 与 const,彻底搞懂作用域
  • 数据结构笔记4:数组、链表OJ
  • 华为云 Flexus+DeepSeek 征文|华为云 Flexus 云服务 Dify-LLM 平台深度部署指南:从基础搭建到高可用实践
  • 疏通经脉: Bridge 联通逻辑层和渲染层
  • 使用component封装组件和h函数的用法
  • 数据结构之Map和Set
  • 打造地基: App拉起基础小程序容器
  • linux面试常考
  • 正交视图三维重建 笔记 2d线到3d线
  • 使用deepseek制作“喝什么奶茶”随机抽签小网页
  • Jina-Embeddings-V4:多模态向量模型的革命性突破与实战指南
  • Python生成器表达式最佳实践指南:何时使用与高效选择
  • Flutter基础(控制器)