Leetcode解题报告 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

本题的大意是给了两个链表,需要按照类似进位加法的方法把两个链表对应的位加起来,得到一个新的链表。

大概的解题思路就是每一位对应相加然后再加上一位相加的进位。乍一看很简单,但是有很多边界条件要考虑到。首先如果两个当前节点都不为空的话,那么正常相加;如果其中有一个链表当前节点为空,则只把另外一个链表当前节点的值与上一位的进位相加;如果两个链表当前节点都为空,则再进一位,表示为一个节点。

Java code:

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
  
    ListNode aiter = l1, biter = l2, result = null,nowiter = null,temp;
    int sum = 0,carry = 0,unit = 0;
    while(aiter != null || biter != null)
    {
        if(aiter != null && biter != null)
        {
            sum = aiter.val + biter.val + carry;
            carry = (sum > 9) ? 1 : 0;
            unit = sum % 10;
            aiter = aiter.next;
            biter = biter.next;
        }
        else if(aiter == null)
        {
            sum = biter.val + carry;
            carry = (sum > 9) ? 1 : 0;
            unit = sum % 10;
            biter = biter.next;
        }
        else if(biter == null)
        {
            sum = aiter.val + carry;
            carry = (sum > 9) ? 1 : 0;
            unit = sum % 10;
            aiter = aiter.next;
        }
        if(result == null){
            result = new ListNode(unit);
            nowiter = result;
            continue;
        }
        temp = new ListNode(unit);
        nowiter.next = temp;
        nowiter = temp;
    }
    if(carry > 0)
    {
        nowiter.next = new ListNode(carry);
    }
    return result;
}

补充解释一下:result == null 这个判断条件是加入第一个元素时的判断。

你可能感兴趣的:(Leetcode解题报告 2.Add Two Numbers章)