题目
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
思考:加法的运算方式即是低位求和,若大于9则高位进1。位数逆序存入链表,则开始节点即是个位,位数依次递增。
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode result = new ListNode(0);
ListNode tmpNode = result;
int a;
int b;
while (l1 != null || l2 != null) {
{
// 如果l1不为空,a=l1的值,l1指向next,否则a=0。
if (l1 != null) {
a = l1.val;
l1 = l1.next;
} else {
a = 0;
}
// 如果l2不为空,b=l2的值,l2指向next,否则b=0。
if (l2 != null) {
b = l2.val;
l2 = l2.next;
} else {
b = 0;
}
// 求和
int temp = a + b + tmpNode.val;
if (temp < 10) {
// 如果和小于10,则把和赋给当前节点
tmpNode.val = temp;
// 如果l1和l2都为空,则不再产生下一个节点
if (l1 != null || l2 != null) {
tmpNode.next = new ListNode(0);
}
} else {
// 如果和大于10,则把和的个位赋给当前节点
tmpNode.val = temp - 10;
// 产生下一个值为1的节点
tmpNode.next = new ListNode(1);
}
// 指向下一个节点
tmpNode = tmpNode.next;
}
}
return result;
}