博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetCode 刷题 两数相加
阅读量:5307 次
发布时间:2019-06-14

本文共 2265 字,大约阅读时间需要 7 分钟。

    刷题第一天 两数之和

     原题目:

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 * 

* 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 *

* 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 *

* 示例: *

* 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) * 输出:7 -> 0 -> 8 * 原因:342 + 465 = 807

@Datapublic class ListNode {    private int val;    private ListNode next;    public  ListNode(int val) {        this.val = val;    }    /**  注意点:1.在两个链表长度不等时需要校验     *          2.curr 作为 result的内存地址的引用,当curr的值变化时并没有改变result的指向,只是改变的result内存的值,     *          开辟了result的内存空间      *@author latiao     * @Date  2019/9/20     **/    public static ListNode solution(ListNode l1, ListNode l2) {        //初始化一个非空列表作为结果        ListNode result = new ListNode(0);        ListNode a = l1, b = l2,curr = result;        int carry = 0;        //当a或者b不都为空时说明,有下一位数字,需要继续相加        while (a != null || b != null) {            //如果为空则设置为0,用于加操作            int x = a != null ? a.val : 0;            int y = b != null ? b.val : 0;            //计算值和;carry为上一个节点满10进1的结果            int sum = carry + x + y;            //int类型默认向下取整,若大于10 则进1            carry = sum / 10;            curr.next = new ListNode(sum % 10) ;            curr = curr.next;            if (a != null) {                a = a.next;            }            if (b != null) {                b = b.next;            }        }        if (carry > 0) {            curr.next = new ListNode(carry);        }        return result.next;    }  public static void main(String[] args) {        ListNode l1 = new ListNode(2);        l1.next = new ListNode(4);        l1.next.next = new ListNode(3);        ListNode l2 = new ListNode(5);        l2.next = new ListNode(6);        l2.next.next = new ListNode(4);        System.out.println(solution(l1, l2));           }}

 上面值得注意的一点  curr 作为 result的内存地址的引用,当curr的值变化时并没有改变result的指向,只是改变的result内存的值,开辟了result的内存空间

    比如下面的例子 

public static List
reference() { List
a = new ArrayList
(); a.add("1"); a.add("2"); List
b =a; b.add("3"); return a; }
public static void main(String[] args) {
System.out.println(reference());//[1, 2, 3] }
 

 我们使用b去添加一个新的数据3 ,最终a也改变了值

       

转载于:https://www.cnblogs.com/fmlyzp/p/11555119.html

你可能感兴趣的文章
activemq5.14+zookeeper3.4.9实现高可用
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>
CS0103: The name ‘Scripts’ does not exist in the current context解决方法
查看>>
20130330java基础学习笔记-语句_for循环嵌套练习2
查看>>
Spring面试题
查看>>
窥视SP2010--第一章节--SP2010开发者路线图
查看>>
C语言栈的实现
查看>>
代码为什么需要重构
查看>>
TC SRM 593 DIV1 250
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
Python-S9-Day127-Scrapy爬虫框架2
查看>>
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
右侧导航栏(动态添加数据到list)
查看>>
81、iOS本地推送与远程推送详解
查看>>
虚拟DOM
查看>>
自建数据源(RSO2)、及数据源增强
查看>>
关于View控件中的Context选择
查看>>