The two numbers and return it as a linked list

/**
*

 
* 原题
* 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
*
* 题目大意
* 有两个单链表,代表两个非负数,每一个节点代表一个数位,数字是反向存储的,
* 即第一个结点表示最低位,最后一个结点表示最高位。求两个数的相加和,并且以链表形式返回。
* 解题思路
* 由于相加时都是对应的位相加,所以我采用递归的方法进行计算;先从个位算起,如果大于10,则取出余数,留在本位,如果大于10,则取整,給下十位位相加,进行计算,一次类推
*

*
* @param l1 第一个数
* @param l2 第二个数
* @return 结果
* @date 2017年2月4日 上午9:31:47
*/

public class LinkedNode {
    int value;
    LinkedNode next;
    public LinkedNode(int value) {
        this.value = value;
    }
public class Solution {

    public LinkedNode handler(LinkedNode l1,LinkedNode l2){

        return helper(l1,l2,0);
    } 
    public LinkedNode helper(LinkedNode l1,LinkedNode l2,int carry){
        if (l1 == null && l2 == null) {
            return carry == 0? null : new LinkedNode(carry);
        }
        if (l1 == null && l2 != null) {
            l1 = new LinkedNode(0);
        }
        if (l1 != null && l2== null) {
            l2 = new LinkedNode(0);
        }
        LinkedNode result = new LinkedNode(-1);
        int sum = l1.value + l2.value + carry;
        result.value = sum % 10;//取余用于本位使用
        carry = sum / 10;//取整 用于进阶使用
        result.next = helper(l1.next, l2.next, carry);
//        int sum = l1.val + l2.val + carry;
//        ListNode curr = new ListNode(sum % 10);//取余
//        curr.next = helper(l1.next, l2.next, sum / 10);       
        return result;
    }

    public void outputResult(LinkedNode result){
        if (result != null) {
            System.out.print("-->"+result.value);
            outputResult(result.next);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值