02.05、链表求和

ops/2025/2/9 7:06:40/

02.05、leetcode.cn/problems/sum-lists-lcci/description/" rel="nofollow">[中等] 链表求和

1、题目描述

给定两个用链表表示的整数,每个节点包含一个数位。

这些数位是反向存放的,也就是个位排在链表首部。

编写函数对这两个整数求和,并用链表形式返回结果。

2、解题思路

本题要求对两个链表表示的整数进行相加。链表中的每个节点代表一个数位,且个位数在链表的头部。即,链表是以反向存放的方式表示整数的。我们需要编写一个函数来求这两个整数的和,并将结果以链表的形式返回。

  1. 初始化链表和指针:
    • 使用一个虚拟头节点 head 来简化链表操作。
    • cur 用于遍历和构建新链表
    • cur1cur2 分别用于遍历链表 l1l2
    • add 用于记录当前位的加和及进位。
  2. 遍历链表
    • 遍历 l1l2,对对应位的数字进行加和。
    • 处理进位情况(即当前位的和超过 10 时的进位)。
  3. 创建新节点:
    • 将当前位的和取个位数,作为新节点的值。
    • 更新进位值(即当前位和除以 10 的结果)。
  4. 处理剩余进位:
    • 如果处理完所有节点后还有进位,需在结果链表中添加一个新节点。
  5. 返回结果:
    • 返回虚拟头节点 head 的下一个节点,即实际结果链表的头节点。

3、代码实现与详细注释

class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode head; // 虚拟头节点,简化链表操作ListNode *cur = &head; // 当前节点,用于构建结果链表ListNode *cur1 = l1; // 遍历链表 l1ListNode *cur2 = l2; // 遍历链表 l2int add = 0; // 存储当前位的和及进位// 遍历链表,直到 l1、l2 都为空且没有进位while (cur1 || cur2 || add) {if (cur1) {add += cur1->val; // 加上 l1 当前节点的值cur1 = cur1->next; // 移动到 l1 的下一个节点}if (cur2) {add += cur2->val; // 加上 l2 当前节点的值cur2 = cur2->next; // 移动到 l2 的下一个节点}// 创建新节点,存储当前位的和的个位数ListNode* newnode = new ListNode(add % 10);cur->next = newnode; // 将新节点链接到结果链表cur = cur->next; // 移动到结果链表的下一个节点add /= 10; // 更新进位值}return head.next; // 返回结果链表的头节点(跳过虚拟头节点)}
};

4、关键点总结

  1. 链表的遍历:
    • 使用 cur1cur2 遍历两个输入链表
    • 每次从两个链表中取值并加和,处理进位情况。
  2. 进位处理:
    • 在加和过程中,处理进位并更新 add 的值。
    • 如果存在剩余进位,继续在结果链表中添加节点。
  3. 结果链表的构建:
    • 使用虚拟头节点来简化链表的处理。
    • 最终返回虚拟头节点的下一个节点,即实际结果链表的头节点。

5、时间复杂度与空间复杂度

  • 时间复杂度: O(max(m, n)),其中 mn 分别是链表 l1l2 的长度。我们只遍历了两个链表一次。
  • 空间复杂度: O(max(m, n)),因为链表的长度决定了结果链表的长度。

http://www.ppmy.cn/ops/156916.html

相关文章

一文解释nn、nn.Module与nn.functional的用法与区别

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀零基础入门PyTorch框架_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 …

C# 比较两个List集合内容是否相同

在 C# 中&#xff0c;要比较两个 List<T> 集合的内容是否相同&#xff0c;可以通过以下几种方法&#xff1a; 一、非自定义类的元素比较 1. 使用 SequenceEqual 方法&#xff08;顺序和内容都相等&#xff09; 顺序和内容都相等&#xff1a;使用 SequenceEqual。 usin…

Nginx与frp结合实现局域网和公网的双重https服务

背景&#xff1a; 因为局域网内架设了 tiddlywiki、 Nextcloud 等服务&#xff0c;同时也把公司的网站架设在了本地&#xff0c;为了实现局域网直接在局域网内访问&#xff0c;而外部访问通过frps服务器作为反向代理的目的&#xff0c;才有此内容。 实现的效果如下图琐事 不喜欢…

C# OpenCV机器视觉:利用TrashNet实现垃圾分类

在繁华的都市里&#xff0c;垃圾分类成了让人头疼的难题。阿强住在一个老旧小区&#xff0c;每天扔垃圾的时候&#xff0c;他都要对着垃圾桶纠结半天&#xff1a;“这到底是可回收物&#xff0c;还是有害垃圾啊&#xff1f;要是分错了&#xff0c;会不会被罚款&#xff1f;” 阿…

【C语言标准库函数】三角函数

目录 一、头文件 二、函数简介 2.1. 正弦函数&#xff1a;sin(double angle) 2.2. 余弦函数&#xff1a;cos(double angle) 2.3. 正切函数&#xff1a;tan(double angle) 2.4. 反正弦函数&#xff1a;asin(double value) 2.5. 反余弦函数&#xff1a;acos(double value)…

技术晋升读书笔记—人月神话

“人月”可以互换&#xff1f; “九个女人能一个月生下一个孩子&#xff1f;” “向延期的软件项目&#xff0c;临时增加人手&#xff0c;能快速完成&#xff1f;” 《人月神话》这本书堪称软件工程领域的经典之作。弗雷德里克布鲁克斯通过一系列精辟的论述&#xff0c;揭示…

apisix网关ip-restriction插件使用说明

ip-restriction插件可以在网关层进行客户端请求ip拦截。 当然了&#xff0c;一般不推荐使用该方法&#xff0c;专业的事专业工具做。建议有条件&#xff0c;还是上防火墙或者waf来做。 官方文档&#xff1a;ip-restriction | Apache APISIX -- Cloud-Native API Gateway whit…

【机器学习】训练数据集和测试数据集的划分及KNN准确率测试

训练数据集和测试数据集的划分 一、摘要二、机器学习算法性能评估三、train test split的具体实现四、调用KNN算法进行准确率测试五、提升模型性能的策略思考 一、摘要 本博文围绕机器学习算法性能评估方法展开&#xff0c;重点介绍了训练数据集与测试数据集的分离&#xff08…