LeetCode题解——Add Two Numbers
题目:
两个数字求和,数字用链表表示,每一个结点代表一位。链表顺序与数字顺序相反,即表头存放数字的最低位。
解法:
分别遍历两个链表的每个结点,对两个结点求和即可。要维护一个变量保存每次相加之后的进位。
更常见的,链表顺序与数字顺序相同,那么做一次链表逆序,求和之后再逆序回来即可。
代码:
1 /**
2 * Definition for singly-linked list.
3 * struct ListNode {
4 * int val;
5 * ListNode *next;
6 * ListNode(int x) : val(x), next(NULL) {}
7 * };
8 */
9 class Solution {
10 public:
11 ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
12 ListNode retHead(-1), *pr = &retHead, *p1 = NULL, *p2 = NULL;
13 int carry = 0; //保存每次结点求和之后的进位,用一个bool也可以
14
15 for(p1 = l1, p2 = l2; p1 != NULL && p2 != NULL; p1 = p1->next, p2 = p2->next) //p1 p2分别遍历两个链表
16 {
17 int sum = p1->val + p2->val + carry;
18 pr->next = new ListNode(sum % 10); //求和结果保存在新结点
19
20 pr = pr->next; //p2指向求和链表的尾结点
21 carry = sum / 10;
22 }
23
24 for(ListNode *p = (p1 == NULL ? p2 : p1); p != NULL; p = p->next) //处理两个链表中未处理完的链表剩余节点
25 {
26 int sum = p->val + carry;
27 pr->next = new ListNode(sum % 10);
28
29 pr = pr->next;
30 carry = sum / 10;
31 }
32
33 if(carry != 0) //如果最后还有进位,必定是1
34 {
35 pr->next = new ListNode(carry);
36 }
37
38 return retHead.next;
39 }
40 };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端