2020.10.18
原题:点击此处
(已经是第三次做这道题了,重新做回来,又有新的感受)
本题难点:
1、链表一长一短,很容易造成代码冗余。
2、容易忽略掉最后一个进位。
本题时间复杂度O(max(m,n))
本题空间复杂度O(max(m,n))
为了解决进位问题:
分别用了两个来记录:
sum用来记录两个链表当前位置之和(包括进位)
result用来记录两个链表当前位置之后经过判断后应该放入结果链表的值(对sum进行余10运算)
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(0);
int sum;
ListNode cur = dummy;
boolean flag = false;
while(l1 != null || l2 != null){
sum = 0;
if(l1 != null){
sum += l1.val;
l1 = l1.next;
}
if(l2 != null){
sum += l2.val;
l2 = l2.next;
}
if(flag){
sum += 1;
flag = false;
}
int result = sum % 10;
if( sum >= 10 ){
flag = true;
}
cur.next = new ListNode(result);
cur = cur.next;
}
if(flag){
cur.next =new ListNode(1);
}
return dummy.next;
}
}