2. 两数相加
问题简单描述: 两个反序列表相加,得到一个正序列表:
输入: l1 = [2,4,3], l2 = [5,6,4]
输出: [7,0,8]
解释: 342 + 465 = 807.
思路1:将列表转化为int进行计算。 链表长度拆过int范围将溢出。
思路2:遍历两个链表,循环计算即可。 O(n^2),时间复杂度有待优化
思路3:一个循环里面判断链表长度,用临时变量缓存需否需要进位
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode pre = new ListNode();
ListNode cur = pre;
int carry=0;
//判断需要需要进位
while (l1 != null || l2 != null ||carry!=0) {
if (l1 != null) {
carry += l1.val;
l1 = l1.next;
}
if (l2 != null) {
carry += l2.val;
l2 = l2.next;
}
cur.next = new ListNode(carry % 10);
cur = cur.next;
carry=carry/10;
}
return pre.next;
}
}