LeetCode刷题第2题:两数相加
约 399 字大约 1 分钟
原文链接
:https://leetcode.cn/problems/add-two-numbers/description/
题意
给你两个非空
的链表,表示两个非负的整数。它们每位数字都是按照逆序
的方式存储的,并且每个节点只能存储一位数字
。请你将两个数相加,并以相同形式返回一个表示和的链表。
示例
实例1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
解题
解题思路
每一位计算的同时需要考虑上一位的进位问题,而当前位计算结束后同样需要更新进位值,关键点:
进位数值往低位放
。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummyHead = new ListNode(-1); //创建一个哨兵节点(头节点)
ListNode current = dummyHead; //用于构建结果链表
int carry = 0; // 初始化进位值为 0
// 遍历两个链表直到全部结束
while(l1!=null||l2!=null||carry!=0){
if(l1!=null){
carry += l1.val;
l1=l1.next;
}
if(l2!=null){
carry += l2.val;
l2=l2.next;
}
current.next = new ListNode(carry%10);
carry = carry/10;
current = current.next;
}
return dummyHead.next;
}
}