zoukankan      html  css  js  c++  java
  • 2.两数相加

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

      如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

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

      示例:

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

      思路:同时遍历两个链表,将对应节点的值相加,并记录进位值,如果循环到有一个链表的节点为null时,就用0和另一个链表节点的值相加,直到两个链表的节点都为null。时间复杂度O(m+n),空间复杂度O(1)。

      需要注意的是,当循环退出时,还要判断一次进位值是否为1,如果为1要再向上进一位。

    class Solution {
            public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
                //定义一个前节点,每次循环将当前节点变为前节点
                ListNode previousNode = new ListNode(0);
                //将初始化的前节点赋值给一个头节点,用于保存最前面的节点
                ListNode head = previousNode;
                //十进制
                int ary = 10;
                //初始化进位值为0
                int carry = 0;
                while (l1 != null || l2 != null) {
                    //判断l1、l2是否为null,为null就假定当前的val值为0
                    int x = l1 == null ? 0 : l1.val;
                    int y = l2 == null ? 0 : l2.val;
                    //计算当前位的值
                    int value = (x + y + carry) % ary;
                    //计算进位值
                    carry = (x + y + carry)/ary;
                    //新建当前节点并赋值给前节点的next
                    previousNode.next = new ListNode(value);
                    //将前节点赋值为当前节点,方便进行下次循环
                    previousNode = previousNode.next;
                    //如果l1、l2不为null,遍历到下一个节点
                    l1 = l1 == null ? null : l1.next;
                    l2 = l2 == null ? null : l2.next;
                }
                //注意最后l1、l2都为null时,while循环退出,但如果前一次有进位的情况
                if (carry == 1) {
                    previousNode.next = new ListNode(1);
                }
                //返回头节点的第二个节点,保存个位数值的节点
                return head.next;
            }
        }
  • 相关阅读:
    [FPGA与ASIC] 优化方法
    学习《中医药治疗热病的作用机理(韩晶岩)》的体会
    使用Capture CIS Lite仿真电路
    Everything软件-集本地文件搜索、文件服务器、批量操作文件等若干功能于一身的高效率软件
    注册表改右键菜单和默认程序
    Qt Quick开发教程4-QML拖放
    Qt Quick开发教程4--使用第三方QML UI包
    个人 PC/Android 常用软件列表
    Qt Quick开发教程3-C++与QML联合开发
    Qt Quick开发教程2-QML语法
  • 原文地址:https://www.cnblogs.com/advancedcz/p/14073798.html
Copyright © 2011-2022 走看看