Add Two Numbers 
You are given two non-empty linked lists representing two non-negative integers. 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.Example: 
 
common   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 class  Solution  {    public  ListNode addTwoNumbers (ListNode l1, ListNode l2)  {             ListNode  dummyHead  =  new  ListNode (0 );      ListNode  p  =  l1, q = l2, curr = dummyHead;     int  carry  =  0 ;     while  (p != null  || q != null ) {         int  x  =  (p != null ) ? p.val : 0 ;         int  y  =  (q != null ) ? q.val : 0 ;         int  sum  =  carry + x + y;         carry = sum / 10 ;         curr.next = new  ListNode (sum % 10 );         curr = curr.next;         if  (p != null ) p = p.next;         if  (q != null ) q = q.next;     }     if  (carry > 0 ) {         curr.next = new  ListNode (carry);     }     return  dummyHead.next;     } } 
best 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30    class  Solution  {     public  ListNode addTwoNumbers (ListNode l1, ListNode l2)  {         ListNode  head  =  new  ListNode (0 );         int  carry  =  0 ;         while (l1!=null ||l2!=null ||carry>0 )         {             ListNode  itr  =  head;             while (itr.next!=null )                 itr = itr.next;              int  sum  =  ( (l1==null  ? 0  : l1.val) + (l2==null  ? 0  : l2.val) + carry);             carry = sum/10 ;             ListNode  temp  =  new  ListNode (sum%10 );             itr.next = temp;             if (l1!=null )                 l1 = l1.next;             if (l2!=null )                 l2 = l2.next;         }                  return  head.next;     } }