Question_add-two-numbers

题目:

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

 

解答:

import java.math.BigInteger;
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        BigInteger bigInteger1 = getBigInteger(l1);
        BigInteger bigInteger2 = getBigInteger(l2);
        BigInteger sum = bigInteger1.add(bigInteger2);
        return transferList(sum);
    }

    /**
     * biginteger转lisy
     * @param sum
     */
    static ListNode transferList(BigInteger sum) {
        String str = sum.toString();
        ListNode tmp = null;
        ListNode firstNode = null;
        for (int i = str.length() - 1; i >= 0; i--) {
            int a = str.charAt(i) - '0';
            if (firstNode == null) {
                firstNode = new ListNode(a);
                tmp = firstNode;
            }else {
                ListNode listNode = new ListNode(a);
                tmp.next = listNode;
                tmp = tmp.next;
            }
        }
        return firstNode;
    }

    /**
     * list转biginteger
     * @param listNode
     * @return
     */
    static BigInteger getBigInteger(ListNode listNode) {
        StringBuffer stringBuffer = new StringBuffer();
        while (listNode != null) {
            stringBuffer.append(listNode.val);
            listNode = listNode.next;
        }
        return new BigInteger(stringBuffer.reverse().toString());
    }
}

 

posted @ 2019-04-16 09:44  yangnk  阅读(96)  评论(0编辑  收藏  举报