LetCode2 两数相加
我的思路:创建一个额外的链表来保存结果,每一位都等于(前两个链表之和+进位)%10,下一步进位等于(两个链表之和+进位)/10,循环遍历链表,直到两个链表都到尾部且无进位时跳出循环。
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int flag = 0;
ListNode cur = new ListNode(0);
ListNode head = cur;
while(l1 != null || l2 != null || flag != 0) {
int val1 = l1 == null ? 0 : l1.val;
int val2 = l2 == null ? 0 : l2.val;
int val = val1 + val2 + flag;
cur.next = new ListNode(val % 10);
flag = val / 10; //下一步的进位
if(l1 == null && l2 == null) {
}
else if(l2 == null) {
l1 = l1.next;
}
else if(l1 == null) {
l2 = l2.next;
}
else {
l1 = l1.next;
l2 = l2.next;
}
cur = cur.next;
}
cur.next = null;
return head.next;
}
}
时间复杂度O(n)
空间复杂度O(n)