mirror of
https://github.com/chefyuan/algorithm-base.git
synced 2026-03-11 04:14:41 +00:00
代码重构 【Github Actions】
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
> 如果阅读时,发现错误,或者动画不可以显示的问题可以添加我微信好友 **[tan45du_one](https://raw.githubusercontent.com/tan45du/tan45du.github.io/master/个人微信.15egrcgqd94w.jpg)** ,备注 github + 题目 + 问题 向我反馈
|
||||
> 如果阅读时,发现错误,或者动画不可以显示的问题可以添加我微信好友 **[tan45du_one](https://raw.githubusercontent.com/tan45du/tan45du.github.io/master/个人微信.15egrcgqd94w.jpg)** ,备注 github + 题目 + 问题 向我反馈
|
||||
>
|
||||
> 感谢支持,该仓库会一直维护,希望对各位有一丢丢帮助。
|
||||
>
|
||||
> 另外希望手机阅读的同学可以来我的 <u>[**公众号:袁厨的算法小屋**](https://raw.githubusercontent.com/tan45du/test/master/微信图片_20210320152235.2pthdebvh1c0.png)</u> 两个平台同步,想要和题友一起刷题,互相监督的同学,可以在我的小屋点击<u>[**刷题小队**](https://raw.githubusercontent.com/tan45du/test/master/微信图片_20210320152235.2pthdebvh1c0.png)</u>进入。
|
||||
> 另外希望手机阅读的同学可以来我的 <u>[**公众号:袁厨的算法小屋**](https://raw.githubusercontent.com/tan45du/test/master/微信图片_20210320152235.2pthdebvh1c0.png)</u> 两个平台同步,想要和题友一起刷题,互相监督的同学,可以在我的小屋点击<u>[**刷题小队**](https://raw.githubusercontent.com/tan45du/test/master/微信图片_20210320152235.2pthdebvh1c0.png)</u>进入。
|
||||
|
||||
#### [面试题 02.05. 链表求和](https://leetcode-cn.com/problems/sum-lists-lcci/)
|
||||
|
||||
之前我们一起做了链表中的几个经典题型,找到倒数第k个节点,找链表中点,判断链表中环的起点,合并链表,反转链表,删除链表中重复值。这些是链表中的经典问题,面试中也经常会考的问题,然后下面我们继续做一道链表题目,也是面试中经常会考的题目,链表求和问题。
|
||||
之前我们一起做了链表中的几个经典题型,找到倒数第 k 个节点,找链表中点,判断链表中环的起点,合并链表,反转链表,删除链表中重复值。这些是链表中的经典问题,面试中也经常会考的问题,然后下面我们继续做一道链表题目,也是面试中经常会考的题目,链表求和问题。
|
||||
|
||||
另外有一些小伙伴说,虽然一天一道题不算多,但是每天读题,做题加消化稍微有点跟不上,所以我打算每个周的工作日进行更新题目,到周末的时候对本周的题目进行总结,然后为大家再写一些别的东西。下面我们一起来看一下今天的题目吧。
|
||||
|
||||
@@ -18,23 +18,23 @@
|
||||
|
||||
这些数位是反向存放的,也就是个位排在链表首部。
|
||||
|
||||
编写函数对这两个整数求和,并用链表形式返回结果。
|
||||
编写函数对这两个整数求和,并用链表形式返回结果。
|
||||
|
||||
示例1:
|
||||
示例 1:
|
||||
|
||||
```java
|
||||
输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即 617 + 295
|
||||
输出:2 -> 1 -> 9,即 912
|
||||
```
|
||||
|
||||
示例2:
|
||||
示例 2:
|
||||
|
||||
```java
|
||||
输入:(9 -> 9) + (9 -> 9),即 99 + 99
|
||||
输出:8 -> 9 -> 1
|
||||
```
|
||||
|
||||
示例3:
|
||||
示例 3:
|
||||
|
||||
```java
|
||||
输入:(5) + (5),即 5 + 5
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
我们应该对链表的每一位进行相加,然后通过链表的和,判断是否需要像下一位进行传递,
|
||||
|
||||
就好比小时候我们用竖式进行加法一样,判断两位相加是否大于10,大于10则进1。
|
||||
就好比小时候我们用竖式进行加法一样,判断两位相加是否大于 10,大于 10 则进 1。
|
||||
|
||||
了解了思路,但是想完全实现代码也不是特别容易,这里需要注意的三个点就是,
|
||||
|
||||
@@ -59,17 +59,15 @@
|
||||
|
||||
2. 需要创建一个变量用来保存进位值。
|
||||
|
||||
3. 当跳出循环之后,需要根据进位值来判断需不需要再对链表长度加1。
|
||||
3. 当跳出循环之后,需要根据进位值来判断需不需要再对链表长度加 1。
|
||||
|
||||
这三条可以结合代码理解进行。
|
||||
|
||||
注:进位值只能是0或1,因为每一位最大为9,9+9=18;
|
||||
注:进位值只能是 0 或 1,因为每一位最大为 9,9+9=18;
|
||||
|
||||

|
||||
|
||||
注:这里需要注意得时,链表遍历结束,我们应该跳出循环,但是我们的 nlist 仍在尾部添加了1节点,那是因为跳出循环时,summod 值为1,所以我们需要在尾部再添加一个节点。
|
||||
|
||||
|
||||
注:这里需要注意得时,链表遍历结束,我们应该跳出循环,但是我们的 nlist 仍在尾部添加了 1 节点,那是因为跳出循环时,summod 值为 1,所以我们需要在尾部再添加一个节点。
|
||||
|
||||
**题目代码**
|
||||
|
||||
@@ -93,7 +91,7 @@ class Solution {
|
||||
//更新进位值,例18/10=1,9/10=0
|
||||
summod = sum/10;
|
||||
//新节点保存的值,18%8=2,则添加2
|
||||
sum = sum%10;
|
||||
sum = sum%10;
|
||||
//添加节点
|
||||
tempnode.next = new ListNode(sum);
|
||||
//移动指针
|
||||
@@ -103,7 +101,7 @@ class Solution {
|
||||
}
|
||||
if (l2 != null) {
|
||||
l2 = l2.next;
|
||||
}
|
||||
}
|
||||
}
|
||||
//最后根据进位值判断需不需要继续添加节点
|
||||
if (summod != 0) {
|
||||
@@ -135,7 +133,7 @@ public:
|
||||
//更新进位值,例18/10=1,9/10=0
|
||||
summod = sum / 10;
|
||||
//新节点保存的值,18%8=2,则添加2
|
||||
sum = sum % 10;
|
||||
sum = sum % 10;
|
||||
//添加节点
|
||||
tempnode->next = new ListNode(sum);
|
||||
//移动指针
|
||||
@@ -145,7 +143,7 @@ public:
|
||||
}
|
||||
if (l2 != nullptr) {
|
||||
l2 = l2->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
//最后根据进位值判断需不需要继续添加节点
|
||||
if (summod != 0) {
|
||||
@@ -159,39 +157,39 @@ public:
|
||||
JS Code:
|
||||
|
||||
```js
|
||||
var addTwoNumbers = function(l1, l2) {
|
||||
//待会儿要返回的链表
|
||||
let nList = new ListNode(-1);//哑节点
|
||||
let tempnode = nList;
|
||||
//用来保存进位值,初始化为0
|
||||
let summod = 0;
|
||||
while (l1 || l2) {
|
||||
//如果l1的链表为空则l1num为0,若是不为空,则为链表的节点值
|
||||
//判断是否为空,为空就设为0
|
||||
let l1num = l1 === null ? 0 : l1.val;
|
||||
let l2num = l2 === null ? 0 : l2.val;
|
||||
//将链表的值和进位值相加,得到为返回链表的值
|
||||
let sum = l1num + l2num + summod;
|
||||
//更新进位值,例18/10=1,9/10=0
|
||||
summod = ~~(sum / 10);
|
||||
//新节点保存的值,18%8=2,则添加2
|
||||
sum = sum % 10;
|
||||
//添加节点
|
||||
tempnode.next = new ListNode(sum);
|
||||
//移动指针
|
||||
tempnode = tempnode.next;
|
||||
if (l1) {
|
||||
l1 = l1.next;
|
||||
}
|
||||
if (l2) {
|
||||
l2 = l2.next;
|
||||
}
|
||||
var addTwoNumbers = function (l1, l2) {
|
||||
//待会儿要返回的链表
|
||||
let nList = new ListNode(-1); //哑节点
|
||||
let tempnode = nList;
|
||||
//用来保存进位值,初始化为0
|
||||
let summod = 0;
|
||||
while (l1 || l2) {
|
||||
//如果l1的链表为空则l1num为0,若是不为空,则为链表的节点值
|
||||
//判断是否为空,为空就设为0
|
||||
let l1num = l1 === null ? 0 : l1.val;
|
||||
let l2num = l2 === null ? 0 : l2.val;
|
||||
//将链表的值和进位值相加,得到为返回链表的值
|
||||
let sum = l1num + l2num + summod;
|
||||
//更新进位值,例18/10=1,9/10=0
|
||||
summod = ~~(sum / 10);
|
||||
//新节点保存的值,18%8=2,则添加2
|
||||
sum = sum % 10;
|
||||
//添加节点
|
||||
tempnode.next = new ListNode(sum);
|
||||
//移动指针
|
||||
tempnode = tempnode.next;
|
||||
if (l1) {
|
||||
l1 = l1.next;
|
||||
}
|
||||
//最后根据进位值判断需不需要继续添加节点
|
||||
if (summod !== 0) {
|
||||
tempnode.next = new ListNode(summod);
|
||||
if (l2) {
|
||||
l2 = l2.next;
|
||||
}
|
||||
return nList.next;//去除哑节点
|
||||
}
|
||||
//最后根据进位值判断需不需要继续添加节点
|
||||
if (summod !== 0) {
|
||||
tempnode.next = new ListNode(summod);
|
||||
}
|
||||
return nList.next; //去除哑节点
|
||||
};
|
||||
```
|
||||
|
||||
@@ -239,11 +237,11 @@ class Solution {
|
||||
var nList = ListNode(-1) // 哑节点
|
||||
var tempnode = nList
|
||||
// 用来保存进位值,初始化为0
|
||||
var summod = 0
|
||||
var summod = 0
|
||||
while l1 != nil || l2 != nil {
|
||||
// 链表的节点值
|
||||
let l1num = l1?.val ?? 0
|
||||
let l2num = l2?.val ?? 0
|
||||
let l1num = l1?.val ?? 0
|
||||
let l2num = l2?.val ?? 0
|
||||
// 将链表的值和进位值相加,得到为返回链表的值
|
||||
var sum = l1num + l2num + summod
|
||||
// 更新进位值,例18/10=1,9/10=0
|
||||
|
||||
Reference in New Issue
Block a user