两数相加

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。

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

示例:

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

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
import java.math.BigDecimal;
class Solution {

          public static BigDecimal Sum(ListNode li){
	        BigDecimal sum=new BigDecimal(0);
	        BigDecimal temp=new BigDecimal(1);
	        while(li!=null){
	           sum=sum.add(temp.multiply(BigDecimal.valueOf(li.val)));
	           temp=temp.multiply(BigDecimal.valueOf(10));
	           li=li.next; 
	        }
	        return sum;
	    }

	    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
	        BigDecimal sum=Sum(l1).add(Sum(l2));
	        ListNode head;
	        ListNode curr=new ListNode(sum.divideAndRemainder(BigDecimal.valueOf(10))[1].intValue());
	        head=curr;
	        sum=sum.divideAndRemainder(BigDecimal.valueOf(10))[0];
	        while(!sum.equals(BigDecimal.valueOf(0))){
	            curr.next=new ListNode(sum.divideAndRemainder(BigDecimal.valueOf(10))[1].intValue());
	            curr=curr.next;
	            sum=sum.divideAndRemainder(BigDecimal.valueOf(10))[0];
	        }
	        return head;  
	    }
        
}

你可能感兴趣的:(java刷题)