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

  • 相关阅读:
    SSD论文优秀句子
    A Case Study -- Performance Evaluation of a DRAM-Based Solid State Disk
    A Case for Flash Memory SSD in Enterprise Database Applications
    Understanding Manycore Scalability of File Systems
    slabs.c
    背包九讲
    redis async client 与自有框架集成
    同步git修改文件到远端服务器脚本
    服务发现:Zookeeper vs etcd vs Consul
    Linux 常用工具贴
  • 原文地址:https://www.cnblogs.com/liuhuaabcp/p/14823805.html
Copyright © 2011-2022 走看看