【LeetCode】【Java】两数相加
1️⃣题目
首先要读题,我已经在读题上栽了许多次了。
题目首先给出了几个关键条件,“非空链表”、“表示两个非负整数”、“逆序存储”、每个结点存储一位“、”两数相加“,其中比较关键的信息是逆序存储,为什么要用逆序存储呢?题目最终让求两数相加,我们平时在进行加法运算时,都是从个位开始,满10进1,那么题目说逆序存储,那么我们相加后,进位是可以很方便的加到下一位上,这样也符合链表的顺序,便于求解,否则我们还要将两个链表反转再相加。
2️⃣思路
明白题意,思路其实很简单,就是利用链表的特性进行求解,我们可以用循环来遍历两个链表,当其中一个链表不为null时,我们就可以求和,把求到的结果存到新的链表中,最后返回链表的头结点即可。
具体看代码注释
3️⃣代码
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode res = new ListNode();
ListNode head = res;
int carry = 0; //进位值
while (l1!=null || l2!=null) {
int sum = 0;
//l1不为null,把当前值加上
if (l1!=null) {
sum += l1.val;
l1 = l1.next;
}
if (l2!=null) {
sum += l2.val;
l2 = l2.next;
}
//先求和,再更新进位值,运行次序不能边
sum = sum + carry;
//更新下一个进位数
carry = sum / 10;
//确保val在0-9
sum = sum % 10;
//求值结果放入下一个结点中,最终求得的结点比原先多一个,所以返回结果从头结点的下一结点开始。
head.next = new ListNode(sum);
head = head.next;
}
//确保最后一位进位值(非0)可以加入新链表
if(carry == 1){
head.next = new ListNode(carry);
}
//返回链表的下一个元素,因为起始元素没有保存结果
return res.next;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了