zoukankan      html  css  js  c++  java
  • [LeetCode] 2.两数相加

    脑壳铁了,竟然想不起来应该怎么把这一位的进位加到下一位上。

    小技巧:对于链表问题,返回结果为头结点时,通常需要先初始化一个预先指针 pre,该指针的下一个节点指向真正的头结点head。使用预先指针的目的在于链表初始化时无可用节点值,而且链表构造过程需要指针移动,进而会导致头指针丢失,无法返回结果。

    看了答案,可以重新新建一个链来记录两个头节点的相加值,然后指针再相应的往后遍历。

    package leetcode;
    
    /**
     * @author doyinana
     * @create 2020-04-08 21:06
     */
    public class L2 {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode pre = new ListNode(0);
            ListNode cur=pre;
            int carry=0;
            while(l1!=null||l2!=null){
                int x=l1==null?0:l1.val;
                int y=l2==null?0:l2.val;
                int sum=x+y+carry;
    
                carry=sum/10;
                sum=sum%10;
                cur.next=new ListNode(sum);
    
                cur=cur.next;
                if(l1!=null)l1=l1.next;
                if(l2!=null)l2=l2.next;
            }
            if(carry==1){
                cur.next=new ListNode(carry);
            }
            return pre.next;
        }
    }
    
    
    class ListNode{
        int val;
        ListNode next;
        ListNode(int x){
            val=x;
        }
    }

     惊了 这个也太低了

    看到更快的方法里面把/和%方法换成了减法:

    /**
     * @author doyinana
     * @create 2020-04-08 21:06
     */
    class Solution{
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode pre = new ListNode(0);
            ListNode cur=pre;
            int carry=0;
            while(l1!=null||l2!=null){
                int x=l1==null?0:l1.val;
                int y=l2==null?0:l2.val;
                int sum=x+y+carry;
                if(sum>=10){
                    sum-=10;
                    carry=1;
                }else{
                    carry=0;
                }
                cur.next=new ListNode(sum);
                cur=cur.next;
                if(l1!=null)l1=l1.next;
                if(l2!=null)l2=l2.next;
            }
            if(carry==1){
                cur.next=new ListNode(1);
            }
            return pre.next;
        }
    }
  • 相关阅读:
    桌面应用程序ClickOne打包部署
    Linux系统基础5周入门精讲(Linux发展过程)
    Linux系统基础5周入门精讲(服务器介绍)
    算法进阶--动态规划
    行为型模式
    结构型模式
    设计模式
    哈希表--树
    数据结构
    查找排序相关面试题
  • 原文地址:https://www.cnblogs.com/doyi111/p/12662979.html
Copyright © 2011-2022 走看看