力扣刷题链表第2题两数相加精解

请你将两个数相加,并以相同形式返回一个表示和的链表。

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

2.变量设置 及其基本数据类型分析

=================

这个题就是给出两个链表,长度至少为1,链表每个节点内的值 至少为0

求两个链表相加之后的和

也就是如题

9 9 9 9 9 9 9

9 9 9 9

8 9 9 9 0 0 0 1对应

分析不难发现 其实这个题就是小学算术题里的

9 9 9 9 9 9 9

+              9 9 9 9

————————

1   0  0 0  9 9  9 8

也就是两个数从右往左 读出来 之后相加得到的结果 再从右往左填进去 新链表

这里我觉得要开辟新链表,不然你不知道两个链表谁就比谁长了,

在原有数据结构上增删改 太麻烦了,情况多且复杂。不如开辟新链表香。

//这里的新链表开辟的很有技巧,因为众所周知,在Java中,内存分为堆内存和栈内存

其中 当 new出现时 一个ne左边的等号 ,就把栈和堆紧密的联系在一起啦~

其中学到目前有new的语句,我总结了一下:

Person person = new Person( );

int [] array = new int [1024];

HashSet set = new HashSet<> ();

String str = new String(“小红日srs”);

而此处 你构造新链表 就要给他一个头结点指向它

关于头结点,我请教前阿里巴巴资深软件开发工程师 高博老师 得到的解释如上。

也就是说本题如果声明新的链表,在堆上开辟内存存这个链表。

ListNode newHead=new ListNode(-10);

ListNode temp=newHead;

这样搞是极其巧妙地,然后返回值返回newHead.next,满满都是细节。

3、循环条件,中间过程,收尾处理工作!

===================

循环条件可以设置为  两个都不为空

while(l1!=null&&l2!=null)

{

int sum=l1.val+l2.val;

ListNode node = new ListNode(sum);

temp.next=node;

temp=temp.next;

l1=l1.next;

l2=l2.next;

}

然后在新链表中再不断地new新节点,新节点的值就是原来两个链表的值的和。

当出了循环之后,一定是三种情况:

1,单链表1走完了,2没走完

2,单链表2走完了,1没走完

3,两个单链表一起走完

3不用管,针对1和2的情况,

1走完了,把链表2剩下的接在新链表上

2走完了,把链表1同理处理!

if(l1==null)

{

temp.next=l2;

}

if(l2==null)

{

temp.next=l1;

}

ListNode cur=newHead;

处理完之后,得到的每个链表内的结点值都是小于等于18的,再对他们进行清算!~

//处理完两个链表的值合并,开始清算新链表

while(cur!=null)

{

if(cur.val>=10)

{

if(cur.next==null)

{

cur.val-=10;

ListNode nb = new ListNode(1);

cur.next=nb;

break;

}

cur.val-=10;

cur.next.val++;

}

cur=cur.next;

}

不如开辟新链表 ,其次 ,这个题的难度降低,就降低在如本题,如果有进位的话,进位肯定是最后一位为1,也就是链表最后补个1,特殊情况考虑一下即可~~

最后老铁们不要忘了返回值呀!``

return newHead.next;

4、总结

====

总代码如下:

/**

  • Definition for singly-linked list.

  • public class ListNode {

  • int val;
    
  • ListNode next;
    

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

React

  • 介绍一下react

  • React单项数据流

  • react生命周期函数和react组件的生命周期

  • react和Vue的原理,区别,亮点,作用

  • reactJs的组件交流

  • 有了解过react的虚拟DOM吗,虚拟DOM是怎么对比的呢

  • 项目里用到了react,为什么要选择react,react有哪些好处

  • 怎么获取真正的dom

  • 选择react的原因

  • react的生命周期函数

  • setState之后的流程

  • react高阶组件知道吗?

  • React的jsx,函数式编程

  • react的组件是通过什么去判断是否刷新的

  • 如何配置React-Router

  • 路由的动态加载模块

  • Redux中间件是什么东西,接受几个参数

  • redux请求中间件如何处理并发

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

  • React的jsx,函数式编程

  • react的组件是通过什么去判断是否刷新的

  • 如何配置React-Router

  • 路由的动态加载模块

  • Redux中间件是什么东西,接受几个参数

  • redux请求中间件如何处理并发

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-y9qpbiqd-1712907838362)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值