问题描述:

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807.
解法思路:

链表哨兵机制   转换为两个长度相同的链表,不够补0;

图解:

 

 2.两数相加_代码实现

 

 代码实现:

        public ListNode addTwoNumbers(ListNode l1ListNode l2) {
           ListNode pre = new ListNode(0);
           ListNode cur = pre;
//           进位
           int carry =0;
           while (l1!=null || l2!=null){
               int a = l1==null ? 0:l1.val;
               int b = l2==null ? 0:l2.val;
               int sum = a+b+carry;
               carry = sum/10;
               sum = sum%10;
               cur.next = new ListNode(sum);
               cur = cur.next;
               if(l1!=null){
                   l1=l1.next;
               }
               if(l2!=null){
                   l2=l2.next;
               }
           }
           if(carry ==1){
               cur.next = new ListNode(carry);
           }
           return pre.next;
        }