LeetCode笔记-0002-两数相加

题目信息

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目解答

根据题目,我们可以理解为两个链表,每个节点为各位数值(逆序),对,两个整数进行求和,我们可以得到以下结论:

  • 个位数与个位数相加,进位只会是0或者1;
  • sum%10得出相加后的个位,sum/10得出进位;
  • 若两位整数位数不同,则补0,及23+123看作023+123;

代码如下:

/**
* 求和
* @param l1
* @param l2
* @return
*/
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    // 标识结果链表的开始节点的前一个节点,即resultListNode.next及之后为求和结果
    ListNode resultListNode = new ListNode(0);
    ListNode tempListNode = resultListNode;// 用于求和,记录节点
    int carryBit = 0;// 保留求和后的进位
    while (l1 != null || l2 != null) {// 只要存在节点不为空,就进入循环
        int x = l1 == null ? 0 : l1.val;// 为null则补0
        int y = l2 == null ? 0 : l2.val;// 为null则补0
        int sum = carryBit + x + y;
        carryBit = sum / 10;// 进位
        tempListNode.next = new ListNode(sum % 10);
        tempListNode = tempListNode.next;
        if (l1 != null) l1 = l1.next;
        if (l2 != null) l2 = l2.next;
    }
    if (carryBit == 1) // 进位只会为0或1
        tempListNode.next = new ListNode(carryBit);
    return resultListNode.next;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到...
    Observer_____阅读 8,094评论 0 1
  • 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只...
    力扣刷题小分队阅读 715评论 1 0
  • 一、题目原型: 给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加...
    花果山松鼠阅读 3,477评论 0 0
  • 今天一上班赶去了南安,回来时天色已黑,今天的注意力投入又创出了一个低点。什分郁闷,现在总算理解了注意力就是力量...
    aweness阅读 876评论 0 0
  • 所有的墙向你倒过来,而你怎么努力都推不开一个缺口,你就会停手,安然于那个狭小,令人窒息的空间,选择向佛,而将心打开...
    oldjimmy阅读 1,748评论 0 0