题目链接
https://leetcode.cn/problems/add-two-numbers/
题解
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
// 简单
if (l1 == null || l2 == null)
return l1 == null ? l2 : l1;
// 长的链来存储结果
int len1 = length(l1);
int len2 = length(l2);
// 长的链表的头
ListNode longHead = Math.max(len1, len2) == len1 ? l1 : l2;
// 短的链表的头
ListNode shortHead = longHead == l1 ? l2 : l1;
ListNode head = longHead;
// 进位信息
int carry = 0;
// 影子(主要为了如果最后一个数字有进位时候找到最后一个节点)
ListNode pre = null;
while (longHead != null && shortHead != null) {
pre = longHead;
// 计算本位的数字
int val = (longHead.val + shortHead.val + carry) % 10;
// 计算进位
carry = (longHead.val + shortHead.val + carry) / 10;
// 给本位赋值
longHead.val = val;
// 长短链表同时后移
longHead = longHead.next;
shortHead = shortHead.next;
}
// 计算长链表多出来的节点
while (longHead != null) {
pre = longHead;
int val = (longHead.val + carry) % 10;
carry = (longHead.val + carry) / 10;
longHead.val = val;
longHead = longHead.next;
}
// 看最后是否有进位
if (carry == 1)
pre.next = new ListNode(1);
return head;
}
public int length(ListNode head) {
int len = 0;
while (head != null) {
len ++;
head = head.next;
}
return len;
}
}