首页 > 代码库 > 2. Add Two Numbers

2. Add Two Numbers

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

思路:从尾巴开始加数,和大于10就变carry和值。需要注意当一个list读完后,那个list的值就是0,只需要加另一个list。最后判断carry的值,如果是0就直接返回,是1的话还要补上一个node。

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {        ListNode dummy=new ListNode(-1);        ListNode copy=dummy;        int carry=0;            while(l1!=null||l2!=null)            {                int va1=0;                if(l1!=null)                {                    va1=l1.val;                    l1=l1.next;                }                int va2=0;                if(l2!=null)                {                    va2=l2.val;                    l2=l2.next;                }                if((va1+va2+carry)>=10)                {                copy.next=new ListNode(va1+va2+carry-10);                carry=1;                }                else                {                    copy.next=new ListNode(va1+va2+carry);                    carry=0;                }                copy=copy.next;            }            if(carry==0)            {                copy.next=null;            }            else            {                copy.next=new ListNode(1);            }            return dummy.next;    }}

 

2. Add Two Numbers