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;
            }
        }
  • 相关阅读:
    浅谈MVC架构模式
    用JSP实现学生查询
    读cookie中文字符乱码问题
    span 换行与不换行
    SAP HANA中的Synonym使用及demo 沧海
    SAP HANA HDB序列的使用方法及技巧(SAP HANA HDB SEQUENCE ) 沧海
    SAP HANA中创建与时间相关的数据及Time Attribute View(Fiscal) 沧海
    SAP HANA中创建与时间相关的数据及Time Attribute View(Gregorian) 沧海
    SAP HANA如何在存储过程中使用自定义的table type 沧海
    SAP HANA SQL执行计划(SAP HANA SQL explain plan)(SQL 优化分析) 沧海
  • 原文地址:https://www.cnblogs.com/advancedcz/p/14073798.html
Copyright © 2011-2022 走看看