题目
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例
输入:l1 = [7,2,4,3], l2 = [5,6,4]
输出:[7,8,0,7]
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[8,0,7]
输入:l1 = [0], l2 = [0]
输出:[0]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法1:反转链表
Java实现
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode h1 = fz(l1);
ListNode h2 = fz(l2);
ListNode dummy = new ListNode();
ListNode tmp = dummy;
int add = 0;
while (h1 != null || h2 != null || add != 0) {
int a = h1 != null ? h1.val : 0;
int b = h2 != null ? h2.val : 0;
tmp.next = new ListNode((a + b + add) % 10);
tmp = tmp.next;
add = (a + b + add) / 10;
if (h1 != null) h1 = h1.next;
if (h2 != null) h2 = h2.next;
}
return fz(dummy.next);
}
public ListNode fz(ListNode l) {
ListNode pre = null;
ListNode cur = l;
ListNode tmp = cur.next;
while (cur != null) {
cur.next = pre;
pre = cur;
cur = tmp;
if (tmp != null) tmp = tmp.next;
}
return pre;
}
}