2. 两数相加
两个数以单链表的形式(逆序)给出,求两个数相加的结果。
解:题目已经给出逆序形式,即最低位是个位,因此可以按照数学的手动计算方法,从个位开始,逐位相加,有进位产生则进位。需要注意的是,如果循环结束后还有进位,需要将最后的进位添加到新的节点中。
class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode head = null, tail = null; int carry = 0;//进位 while (l1 != null || l2 != null) { int n1 = l1 != null ? l1.val : 0; int n2 = l2 != null ? l2.val : 0; int sum = n1 + n2 + carry; if (head == null) { head = tail = new ListNode(sum % 10); } else { tail.next = new ListNode(sum %10); tail = tail.next; } carry = sum / 10; if (l1 != null) { l1 = l1.next; } if (l2 != null) { l2 = l2.next; } } //end while if (carry > 0) { tail.next = new ListNode(carry); } return head; } }