题解
迭代累加
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
// 存放头节点,作为返回值
ListNode head = null;
// 存放当前节点
ListNode temp = null;
// 记录是否进位,如果进位为 1,无进位为 0
int nextTip = 0;
// 循环终于条件:l1 和 l2 都为空
while (l1 != null || l2 != null) {
// 如果链表不为空,记录链表的值,如果为空则补 0
int l1V = l1 != null ? l1.val : 0;
int l2V = l2 != null ? l2.val : 0;
// 记录相加之后的值,注意要加进位
int sum = l1V + l2V + nextTip;
// 如果 sum 大于等于10,进位
nextTip = sum >= 10 ? 1 : 0;
// 如果头节点为空,说明是第一次循环,进行初使化头节点操作
if (head == null) {
head = temp = new ListNode(sum % 10);
} else {
temp.next = new ListNode(sum % 10);
temp = temp.next;
}
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
// 注意处理最后一个进位
if (nextTip == 1) temp.next = new ListNode(1);
return head;
}
}