题目描述
- 解法:直接用两个链表构造出第三个链表即可
- 注意点:进位carry。进位的情况有几种,都要考虑上。
- (其实感觉这道题不是很难,挺直观的)
代码
- 时间复杂度:O(max(m,n)),m&n分别为两链表长度。max(m,n)其实就是下面while()循环的次数。
- 空间复杂度:O(max(m,n))。结果链表的长度最多为较长链表的长度 +1(最后进位的情况)。
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode l3 = new ListNode();ListNode forl1 = l1, forl2 = l2, forl3 = l3; int carry = 0; while (true){if (forl1 == null && forl2 == null)break;else{int num1 = forl1 == null ? 0 : forl1.val;int num2 = forl2 == null ? 0 : forl2.val;forl3.val += num1 + num2;carry = forl3.val / 10;forl3.val -= carry * 10;forl1 = forl1 == null ? forl1 : forl1.next;forl2 = forl2 == null ? forl2 : forl2.next;}if (forl1 == null && forl2 == null && carry == 0)break;ListNode newNode = new ListNode(carry);forl3.next = newNode;forl3 = forl3.next;}return l3;}
}