WANG LH , Research & Development

Add Two Numbers

2016.11.21 14:07
package com.sea.leetcode;

import java.util.Date;

/**
 * Created by Kings on 2016/11/18.
 * Description:
 * <p>
 * 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
 * <p>
 * Custom Testcase:
 * [2,4,3]
 * [5,6,4]
 *
 * 这种算法其实可以用来计算大整数
 */
public class AddTwoNumbers {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode sumNode = null;
        ListNode sumHeadNode = null;
        int tempvalue = 0;
        if (l1 == null) {
            sumHeadNode = l2;
        } else if (l2 == null) {
            sumHeadNode = l1;
        } else {
            while (l1 != null || l2 != null || tempvalue > 0) {
                if (l1 == null) l1 = new ListNode(0);
                if (l2 == null) l2 = new ListNode(0);
                int nodeSum = l1.val + l2.val + tempvalue;
                int digitNode = nodeSum % 10;
                if (sumNode == null) {
                    sumNode = new ListNode(digitNode);
                    sumHeadNode = sumNode;
                } else {
                    sumNode.next = new ListNode(digitNode);
                    sumNode = sumNode.next;
                }
                tempvalue = nodeSum / 10;

                l1 = l1.next;
                l2 = l2.next;
            }

        }
        return sumHeadNode;
    }


    public static void main(String[] args) {
        ListNode l1 = new ListNode(3);
        l1.next = new ListNode(7);
//        l1.next.next = new ListNode(3);

        ListNode l2 = new ListNode(9);
        l2.next = new ListNode(2);
//        l2.next.next = new ListNode(4);
//
        AddTwoNumbers atn = new AddTwoNumbers();
        System.out.println(new Date().getTime());
        ListNode resultListNode = atn.addTwoNumbers(l1, l2);
        System.out.println(new Date().getTime());
        while (resultListNode != null) {
            System.out.println(resultListNode.val);
            resultListNode = resultListNode.next;
        }

    }

}


class ListNode {
    int val;
    ListNode next;

    public ListNode(int val) {
        this.val = val;
    }
}