1. 题目
https://leetcode.cn/problems/add-two-numbers/
2. 解法
解答思路。
为了解决这个问题,我们需要模拟两数相加的过程,从低位到高位,逐位相加,并考虑进位的情况。我们可以使用以下的步骤:
- 创建一个虚拟头节点,它不存储任何值,只是为了方便返回结果链表的头节点。
- 创建一个当前节点指针,指向虚拟头节点。
- 创建一个进位标志,初始为0。
- 遍历两个链表,直到两个链表都遍历完毕。
- 取出两个链表中对应位置的值,如果某个链表为空,则取0。
- 将这两个值加上进位标志,得到当前位的和。
- 用除以10的商来更新进位标志,用余数来创建一个新节点,存储当前位的值。
- 将当前节点指针的下一个节点指向这个新节点,并将当前节点指针移动到下一个节点。
- 如果最后还有进位,创建一个新节点,存储进位值,并将当前节点指针的下一个节点指向这个新节点。
- 返回虚拟头节点的下一个节点,即结果链表的头节点。
这样,我们就完成了两数相加的问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public ListNode addTwoNumbers(ListNode l1, ListNode l2) { int carry = 0 ; StringBuilder sb = new StringBuilder(); ListNode dummy = new ListNode(- 1 ); ListNode curr = dummy; while (l1 != null || l2 != null || carry != 0 ) { int sum = carry; if (l1 != null ) { sum += l1.val; l1 = l1.next; } if (l2 != null ) { sum += l2.val; l2 = l2.next; } curr.next = new ListNode(sum % 10 ); curr = curr.next; carry = sum / 10 ; } return dummy.next; } |
3. 总结
分类:
算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)