添加py和js,添加注释

This commit is contained in:
jaredliw 2021-07-13 13:08:47 +08:00
parent ea1335f661
commit ed8fcb7c43

View File

@ -55,11 +55,11 @@
了解了思路但是想完全实现代码也不是特别容易这里需要注意的三个点就是 了解了思路但是想完全实现代码也不是特别容易这里需要注意的三个点就是
1.我们需要根据两个链表的长度不断对新链表添加节点 1. 我们需要根据两个链表的长度不断对新链表添加节点
2.需要创建一个变量用来保存进位值 2. 需要创建一个变量用来保存进位值
3.当跳出循环之后需要根据进位值来判断需不需要再对链表长度加1. 3. 当跳出循环之后需要根据进位值来判断需不需要再对链表长度加1
这三条可以结合代码理解进行 这三条可以结合代码理解进行
@ -78,8 +78,8 @@ Java Code:
```java ```java
class Solution { class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) { public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//返回链表 //待会儿要返回链表
ListNode nList = new ListNode(-1); ListNode nList = new ListNode(-1);//虚拟头节点
ListNode tempnode = nList; ListNode tempnode = nList;
//用来保存进位值初始化为0 //用来保存进位值初始化为0
int summod = 0; int summod = 0;
@ -92,7 +92,7 @@ class Solution {
int sum = l1num+l2num+summod; int sum = l1num+l2num+summod;
//更新进位值例18/10=19/10=0 //更新进位值例18/10=19/10=0
summod = sum/10; summod = sum/10;
//新节点保存的值18 % 8=2则添加2 //新节点保存的值18% 8=2则添加2
sum = sum%10; sum = sum%10;
//添加节点 //添加节点
tempnode.next = new ListNode(sum); tempnode.next = new ListNode(sum);
@ -106,10 +106,10 @@ class Solution {
} }
} }
//最后根据进位值判断需不需要继续添加节点 //最后根据进位值判断需不需要继续添加节点
if (summod == 1) { if (summod != 0) {
tempnode.next = new ListNode(summod); tempnode.next = new ListNode(summod);
} }
return nList.next; return nList.next;//去除-1节点
} }
} }
``` ```
@ -120,8 +120,8 @@ C++ Code:
class Solution { class Solution {
public: public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
//返回链表 //待会儿要返回链表
ListNode * nList = new ListNode(-1); ListNode * nList = new ListNode(-1);//虚拟头节点
ListNode * tempnode = nList; ListNode * tempnode = nList;
//用来保存进位值初始化为0 //用来保存进位值初始化为0
int summod = 0; int summod = 0;
@ -134,7 +134,7 @@ public:
int sum = l1num + l2num + summod; int sum = l1num + l2num + summod;
//更新进位值例18/10=19/10=0 //更新进位值例18/10=19/10=0
summod = sum / 10; summod = sum / 10;
//新节点保存的值18 % 8=2则添加2 //新节点保存的值1 %8=2则添加2
sum = sum % 10; sum = sum % 10;
//添加节点 //添加节点
tempnode->next = new ListNode(sum); tempnode->next = new ListNode(sum);
@ -148,11 +148,85 @@ public:
} }
} }
//最后根据进位值判断需不需要继续添加节点 //最后根据进位值判断需不需要继续添加节点
if (summod == 1) { if (summod != 0) {
tempnode->next = new ListNode(summod); tempnode->next = new ListNode(summod);
} }
return nList->next; return nList->next;//去除-1节点
} }
}; };
``` ```
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=19/10=0
summod = ~~(sum / 10);
//新节点保存的值1 %8=2则添加2
sum = sum % 10;
//添加节点
tempnode.next = new ListNode(sum);
//移动指针
tempnode = tempnode.next;
if (l1) {
l1 = l1.next;
}
if (l2) {
l2 = l2.next;
}
}
//最后根据进位值判断需不需要继续添加节点
if (summod !== 0) {
tempnode.next = new ListNode(summod);
}
return nList.next;//去除-1节点
};
```
Python Code:
```py
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
# 待会儿要返回的链表
nList = ListNode(-1) # 虚拟头节点
tempnode = nList
# 用来保存进位值初始化为0
summod = 0
while l1 is not None and l2 is not None:
# 如果l1的链表为空则l1num为0若是不为空则为链表的节点值
# 判断是否为空为空就设为0
l1num = 0 if l1 is None else l1.val
l2num = 0 if l2 is None else l2.val
# 将链表的值和进位值相加得到为返回链表的值
sum_ = l1num + l2num + summod
# 更新进位值例18/10=19/10=0
# 新节点保存的值1 %8=2则添加2
# 这里使用divmod函数对上方的代码进行了一丢丢的简化
summod, sum_ = divmod(sum_, 10)
# 添加节点
tempnode.next = ListNode(sum_)
# 移动指针
tempnode = tempnode.next
if l1 is not None:
l1 = l1.next
if l2 is not None:
l2 = l2.next
# 最后根据进位值判断需不需要继续添加节点
if summod != 0:
tempnode.next = ListNode(summod)
return nList.next # 去除-1节点
```