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

  • 相关阅读:
    对象池使用时要注意几点
    Flash3D学习计划(一)——3D渲染的一般管线流程
    714. Best Time to Buy and Sell Stock with Transaction Fee
    712. Minimum ASCII Delete Sum for Two Strings
    647. Palindromic Substrings(马拉车算法)
    413. Arithmetic Slices
    877. Stone Game
    338. Counting Bits
    303. Range Sum Query
    198. House Robber
  • 原文地址:https://www.cnblogs.com/liuhuaabcp/p/14823805.html
Copyright © 2011-2022 走看看