美文网首页
LeetCode_2 两数相加(链表题)

LeetCode_2 两数相加(链表题)

作者: monkey01 | 来源:发表于2018-10-26 17:46 被阅读17次

题目地址:https://leetcode-cn.com/problems/add-two-numbers/

题目:

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

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

示例:

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

试题分析:

这道题是一道双链表操作题,如果第一次做该题还是需要多调试不是那么简单,在整个实现过程中有几个小技巧,因为两个链表的长度可能是不同的,并且在相加的过程中会存在不断进位的情况,所以我们可以给结果链表增加一个虚拟头节点,简化第一个节点的操作,再增加一个进位符来表示下个待处理的两个链表节点相加是否要进位,在两个链表节点相加的时候要同时加上进位符,并更新进位符值。

最后还要防止如果两个链表都遍历结束,进位符还有值则需要新增一个值为1的节点。

代码:

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head = new ListNode(0);
        ListNode result = head;
        int ten = 0;//进位符
        //整个算法中利用三元运算符判空,并对操作数字赋0来保证判断逻辑简单
        for(;l1!=null || l2!=null;
            l1=l1==null?null:l1.next,
                    l2=l2==null?null:l2.next,
                result=result.next){
            int val1 = l1==null?0:l1.val;
            int val2 = l2==null?0:l2.val;
            result.next = new ListNode((val1+val2+ten)%10);
            ten = (val1+val2+ten)/10;
        }
        if(ten>0){
                //如果遍历结束后还有一位进位符有值则加尾节点并赋值
            result.next = new ListNode(ten);
        }
        //头节点为无效哨兵节点,需要返回next
        return head.next;
    }

源码路径:com.monkey01.linkedlist.AddTwoNumbers_2

配套测试代码路径:test目录com.monkey01.linkedlist.AddTwoNumbers_2Test

https://github.com/feiweiwei/LeetCode4Java.git

相关文章

  • LeetCode_2 两数相加(链表题)

    题目地址:https://leetcode-cn.com/problems/add-two-numbers/ 题目...

  • 两数相加(golang)

    原题: 两数相加 关联:两数相加 II(golang)从低位加起,注意进位,且最后进位完的链表可能比l1,l2中最...

  • 链表 【两数相加】

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

  • 链表 两数相加

    https://leetcode-cn.com/explore/interview/card/bytedance/...

  • 链表:两数相加

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

  • 两数相加——链表

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

  • 链表--两数相加

    目录[https://www.jianshu.com/p/85e18c21317a] 题号[https://lee...

  • leetcode python 2-11

    说明:自己思考以及和别人对比,参考对比程序来源 包含 2 - 11 题 002、单向链表两数相加 You are ...

  • 两数相加 II(golang)

    原题:两数相加 II 使用栈,其它与两数相加(golang)类似

  • leetcode-0002

    题目: 2. 两数相加 关键词: 递归,进位,链表

网友评论

      本文标题:LeetCode_2 两数相加(链表题)

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