题目描述
解法 :直接用两个链表构造出第三个链表即可注意点 :进位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; }
}