• 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;
            }
        }
  • 相关阅读:
    Python自动化开发从浅入深-进阶(Twisted、Reactor)
    Python自动化开发从浅入深-进阶(socketServer)
    Python自动化开发从浅入深-进阶(select,poll,epoll学习)
    Python自动化开发从浅入深-进阶(进程)
    Python自动化开发从浅入深-语言基础(一些心得)
    Python自动化开发从浅入深-语言基础(常用模块)
    PSSH 批量管理服务器
    linux常用命令大全
    Why is 0[0] syntactically valid in javascript?
    免费为王(一)
  • 原文地址:https://www.cnblogs.com/advancedcz/p/14073798.html
Copyright © 2020-2023  润新知