zoukankan      html  css  js  c++  java
  • LeetCode之两数相加(链表逆序相加)超详细java讲解

    描述:给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0开头。         

    输入:l1 = [2,4,3], l2 = [5,6,4]
    输出:[7,0,8]
    解释:342 + 465 = 807.
    输入:l1 = [0], l2 = [0]
    输出:[0]

    思路一:用链表l1和链表l2从前往后相加,但是相加后满十进一是进到后面,因为题目要求是返回一个逆序的和,这是我们平时两个整数正常相加的唯一区别。

    时间复杂度:O(max(m,n)),m,n分别是两个链表的长度。

    空间复杂度:O(1)

    结点类:

    class ListNode {
          int val;
          ListNode next;
          ListNode(int val) { 
              this.val = val;
          }
    }

    完整代码如下:

     public ListNode addTwoNumbers(ListNode l1,ListNode l2){
    
            ListNode head = null,tail = null;//创建新的头结点和尾结点
            int carry = 0;
            while(l1 != null || l2 != null){
                int n1 = (l1 != null ? l1.val:0); //结点不为null的话就赋值当前结点的值,否则赋值为零
                int n2 = (l2 != null ? l2.val:0);
                int sum  = n1 + n2 + carry;  //从前往后取值相加,carry最初是n1+n2相加的十位上的值
                if(head == null){
                    head = tail = new ListNode(sum%10); //开始head为空,head=tail,并赋值sum%10
    
                }else{
                    tail.next = new ListNode(sum%10); //head不为空,则直接赋值sum%10
                    tail = tail.next;   //后移一位
                }
                carry = sum/10;  //carry即十位上的值,进制
                if(l1 != null){   //如果l1不为null则直接后移一位
                    l1 = l1.next;
                }
                if(l2 != null){
                    l2 = l2.next;
                }
            }
            if(carry>0){           //最后一个进制放最后,千万别忘了。
                tail.next = new ListNode(carry);
            }
            return head;
        }

    注意点:据说将carry = sum/10; 改成carry = sum > 9 ? 1:0可以更加省时。理由是除法运算比直接比较跟费时,具体没验证。2021-05-28

  • 相关阅读:
    头信息已输出的报错信息位置定位
    阅读<php程序设计>笔记
    include、ruquire使用相对路径总结
    php中未定义的变量使用技巧
    Oracle官方教材(9i、10G及App 11i)
    Vista的软件兼容性
    轻松找回Vista序列号
    oralce定时执行存储过程任务设置步骤详细
    今天做了内存测试,发现真的是内存问题导致的一连串的问题
    网络邮盘(GMailStore) V3.0.2
  • 原文地址:https://www.cnblogs.com/liuhuaabcp/p/14823805.html
Copyright © 2011-2022 走看看