题解 | 链表相加(一)

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

/**
 * NC317 链表相加(一)
 * @author d3y1
 */
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param l1 ListNode类
     * @param l2 ListNode类
     * @return ListNode类
     */
    public ListNode ListAdd (ListNode l1, ListNode l2) {
        return solution1(l1,l2);
        // return solution2(l1,l2);
    }

    /**
     * 迭代
     * @param l1
     * @param l2
     * @return
     */
    private ListNode solution1(ListNode l1, ListNode l2){
        ListNode head = new ListNode(-1);
        ListNode tail = head;
        ListNode node;
        int val1,val2,sum,carry=0;
        while(l1!=null || l2!=null || carry>0){
            if(carry == 0){
                if(l1 == null){
                    tail.next = l2;
                    break;
                }
                if(l2 == null){
                    tail.next = l1;
                    break;
                }
            }

            val1 = 0;
            if(l1 != null){
                val1 = l1.val;
                l1 = l1.next;
            }

            val2 = 0;
            if(l2 != null){
                val2 = l2.val;
                l2 = l2.next;
            }

            sum = val1+val2+carry;
            carry = sum/10;
            node = new ListNode(sum%10);
            // 尾插法
            tail.next = node;
            tail = node;
        }

        return head.next;
    }

    //////////////////////////////////////////////////////////////////////////////

    private int val1,val2,sum,carry=0;
    private ListNode head = new ListNode(-1);
    private ListNode tail = head;
    private ListNode node;

    /**
     * 递归: 超出内存限制!
     * @param l1
     * @param l2
     * @return
     */
    private ListNode solution2(ListNode l1, ListNode l2){
        add(l1,l2);
        return head.next;
    }

    private void add(ListNode l1, ListNode l2){
        if(l1==null && l2==null && carry==0){
            return;
        }

        val1 = 0;
        if(l1 != null){
            val1 = l1.val;
            l1 = l1.next;
        }

        val2 = 0;
        if(l2 != null){
            val2 = l2.val;
            l2 = l2.next;
        }

        sum = val1+val2+carry;
        carry = sum/10;
        node = new ListNode(sum%10);
        // 尾插法
        tail.next = node;
        tail = node;

        add(l1,l2);
    }
}

全部评论

相关推荐

我看看你怎么个事来
牛牛爱吃草草:我看看你怎么个事来
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
07-09 12:12
门头沟学院 Java
5月底投简历7月初开奖收获秋招第一个offer,虽然白菜价,但至少能保底了
土木转行ing:土木博士想转图像,最后拿了 tp 提前批 sp 最低档,感觉性价比不高
TP-LINK开奖132人在聊
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务