一、题解:
关键字:非空、非负整数、逆序、链表。
解题思路:因为本身是逆序的,所以只需要按照传入值依次相加,同时需要考虑相加之后是否需要进位。另注意可在最开始添加初始节点用以返回最终结果。代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode pre = new ListNode(0);
ListNode result = pre;
int cur = 0;
while (l1 != null || l2 != null) {
int l1Val = l1 != null ? l1.val : 0;
int l2Val = l2 != null ? l2.val : 0;
int total = l1Val + l2Val + cur;
ListNode current = null;
if (total > 9) {
current = new ListNode(total - 10);
cur = 1;
} else {
current = new ListNode(total);
cur = 0;
}
pre.next = current;
pre = current;
l1 = l1 != null ? l1.next : null;
l2 = l2 != null ? l2.next : null;
}
if (cur == 1) {
pre.next = new ListNode(1);
}
return result.next;
}
}
二、举一反三:
若传入链表为正序的,要如何解呢?
解题思路:除了要考虑进位外,因为是正序,当两个数的长度不一样时,可以在短的链表前前补0,然后再进行相关操作。