给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807.分析:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode p = l1, q = l2; // 原链表的两个遍历指针
ListNode resultHead = new ListNode(-1); // 结果链表的头结点head
ListNode curr = resultHead; // 结果链表的遍历指针,代表当前操作的节点
int carry = 0; // 进位
// 1.遍历两个链表
while (p != null || q != null) { // 以⻓链表为准
// 获取当前节点的值:链表较短,已⽆节点,取0
int x = p != null ? p.val : 0;
int y = q != null ? q.val : 0;
// 2.对应位置的节点数值相加
int sum = x + y + carry;
carry = sum / 10; // 如何得到进位:和对10求整,得到此次计算的进位
int num = sum % 10; // 存放到新链表节点中的数值
// 3.将计算结果插⼊新链表尾部
curr.next = new ListNode(num); // 创建新节点
curr = curr.next;
p = p == null ? p : p.next;
q = q == null ? q : q.next;
}
if (carry > 0) { // 处理进位节点
curr.next = new ListNode(carry);
}
return resultHead.next;
}



