《链表篇》---两数相加(中等)-LMLPHP

题目传送门 

方法一:迭代

class Solution {

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        //定义头结点和当前节点
        ListNode head = null,cur = null;
        //carry记录进位情况。
        int carry = 0; 
 
        while(l1 != null || l2 != null){
            //判断节点是否为null。如果不为null则赋值
            int n1 = l1 != null ? l1.val : 0;
            int n2 = l2 != null ? l2.val : 0;
            //计算两个节点的和。并且若有进位,加上进位。
            int sum = n1 + n2 + carry;

            //如果头节点为空,则新建节点
            if(head == null){
                head = cur = new ListNode(sum%10);
            }else{ //不为空则新添节点
                cur.next = new ListNode(sum%10);
                cur = cur.next;
            }
            //计算进位的值
            carry = sum /10;

            //不为null则向后移动
            if(l1 != null){
                l1 = l1.next;
            }
            if(l2 != null){
                l2 = l2.next;
            }
        }
        //最后若有进位。则新添进位值的节点。
        if(carry > 0){
            cur.next = new ListNode(carry);
        }
        return head;
    }
}

 

10-31 04:34