美文网首页算法提高之LeetCode刷题
Leetcode之2-两数相加(Add Two Numbers)

Leetcode之2-两数相加(Add Two Numbers)

作者: 北京程序猿 | 来源:发表于2019-03-28 18:07 被阅读0次

    前言

    个人网站

    公众号: 北京程序猿, 网站 : https://yaml.vip

    算法题

    题干

    给出两个 非空 的链表用来表示两个非负的整数。
    其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。
    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
    您可以假设除了数字0之外,这两个数都不会以0开头。

    示例

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

    Java代码

    public class ListNode {
    
        public int val;
        public ListNode next;
    
        public ListNode(int x) {
        val = x;
        }
    }
    
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if (l1 == null) {
            return l2;
        }
        if (l2 == null) {
            return l1;
        }
        ListNode root = new ListNode(0);
        ListNode cursor = root;
        int divided = 0;
        int cursorOneVal, cursorTwoVal;
        while (l1 != null || l2 != null) {
            cursorOneVal = l1 == null ? 0 : l1.val;
            cursorTwoVal = l2 == null ? 0 : l2.val;
            int nodeValSum = cursorOneVal + cursorTwoVal + divided;
            divided = nodeValSum / 10;
            ListNode node = new ListNode(nodeValSum % 10);
            cursor.next = node;
            cursor = cursor.next;
            l1 = l1 != null ? l1.next : null;
            l2 = l2 != null ? l2.next : null;
        }
        if (divided != 0) {
            ListNode last = new ListNode(divided);
            cursor.next = last;
        }
        return root.next;
        }
    

    代码解析

    1. 第2-7行代码主要是针对特殊的case做处理。
    2. 第9行代码cursor为新链表指针。
    3. 第10行代码表示每次两链表元素做和除以10之后结果。
    4. 第23-25行代码表示,如果divided值不为0, 说明最后一个元素做和之后比10大, 需要将divided值放在最后一个节点。

    总结

    1. 虽然这道算法题中等难度, 但算是比较简单, 重点是代码当中divided变量及最后节点的处理。

    本文著作权归作者所有。

    商业转载请联系作者获得授权,非商业转载请于文首标明作者姓名,保持文章完整性,并附上出处和文章链接!未按规范转载者,作者保留追究相应责任的权利!

    作者:北京程序猿

    链接:https://yaml.vip/2019/03/28/Leetcode%E4%B9%8B2-%E4%B8%A4%E6%95%B0%E7%9B%B8%E5%8A%A0/

    相关文章

      网友评论

        本文标题:Leetcode之2-两数相加(Add Two Numbers)

        本文链接:https://www.haomeiwen.com/subject/hkucbqtx.html