请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 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前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
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行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
-
React的jsx,函数式编程
-
react的组件是通过什么去判断是否刷新的
-
如何配置React-Router
-
路由的动态加载模块
-
Redux中间件是什么东西,接受几个参数
-
redux请求中间件如何处理并发
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-y9qpbiqd-1712907838362)]