【主要考察点】:链表
解题方法
1. 模拟
同时遍历两个链表,并相加相对应位置上的值,如果有进位再加上进位值即可。
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
// 进位
int carry = 0;
// 虚一个头节点
ListNode dummy = new ListNode();
ListNode ans = new ListNode();
dummy.next = ans;
// 先遍历l1和l2节点
while (l1 != null && l2 != null) {
int sum = l1.val + l2.val + carry;
// 大于9,则进位加1
if (sum > 9) {
carry = 1;
} else {
carry = 0;
}
sum = sum % 10;
// 处理节点
ans.next = new ListNode(sum);
ans = ans.next;
l1 = l1.next;
l2 = l2.next;
}
// 单独处理,l1或者l2未遍历结束的情况
while (l1 != null) {
int sum = l1.val + carry;
if (sum > 9) {
carry = 1;
} else {
carry = 0;
}
sum = sum % 10;
ans.next = new ListNode(sum);
ans = ans.next;
l1 = l1.next;
}
while (l2 != null) {
int sum = l2.val + carry;
if (sum > 9) {
carry = 1;
} else {
carry = 0;
}
sum = sum % 10;
ans.next = new ListNode(sum);
ans = ans.next;
l2 = l2.next;
}
// 最后节点都遍历完了,还要注意是否有进位值未处理的情况
if (carry == 1) {
ans.next = new ListNode(1);
}
return dummy.next.next;
}
}
class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}