题目简述
使用链表逆序表达数字(2->3->4=432),每个节点相加求和,并输出链表。
代码
class Solution {
public ListNode
addTwoNumbers(ListNode l1
, ListNode l2
) {
int carry
= 0 ;
ListNode result
= new ListNode(0);
ListNode rear
= result
;
int sum
= 0;
int num
= 0;
for(int i
=0; l1
!= null
|| l2
!= null
||carry
!= 0; i
++){
if(l1
!=null
&& l2
!=null
){
sum
= l1
.val
+ l2
.val
;
l1
= l1
.next
;
l2
= l2
.next
;
}else if(l1
== null
&& l2
!=null
){
sum
= l2
.val
;
l2
= l2
.next
;
}else if(l2
== null
&& l1
!=null
){
sum
= l1
.val
;
l1
= l1
.next
;
}else if(l1
== null
&& l2
== null
){
sum
= 0;
}
sum
= sum
+ carry
;
num
= sum
% 10;
carry
= sum
/ 10;
ListNode newNode
= new ListNode(num
);
rear
.next
= newNode
;
rear
= rear
.next
;
}
return result
.next
;
}
}
忘记的知识点
链表循环尾插入: ListNode result = new ListNode(0);//结果链表 ListNode rear = result;//指向链表表尾的指针 rear.next = newNode;//插入新的节点 rear = rear.next;//指针向后移一位注意else if的重要性:在这段代码中,因为每个if都使指针后移一位,如果不加else if(直接使用if),会导致下一次判断的是后移后的值,而这是不正确的求余数和商之前,应该先求和,因为思路不够清晰,导致在这个bug花费了很多时间
碎碎念
今天看到美室友汐发了一张图:都不要做工具人。我的感触很深,因为在学习写代码的过程中,我深刻的认识到循环对于机器来说是多么的容易,那么作为人类,我们最应该避免的应该就是做着那些容易被机器取代的工作。简单、无意义的重复,没有任何技巧,那么这份工作总有一天会轻而易举的被机器取代,这个过程也许发生的悄无声息,但这背后有无数工人的叹息与无奈。所以,从事创造性劳动是十分有必要的,千万不能因为一时懒惰不舍得动脑,而为日后的生活埋下隐患。