力扣题目:2. 两数相加
解题思路执行用时:2 ms, 在所有 Java 提交中击败了96.47%的用户
内存消耗:38 MB, 在所有 Java 提交中击败了99.43%的用户
思路:
既然可以顺序求解,那么就按照顺序进行加法的运算
首先一个需要注意的:进位,使用oj来表示
而循环计算的条件是:l1和l2有一个不为null,(l1!=null || l2 != null) 也即是需要往下继续生成节点
循环内部的判断是:
通过一个变量v来联系l1和l2
1.看l1是否为null,如果是,那么v就为l2的值,此时l1已经为null,l2=l2.next
2.看l2是否为null,如果是,那么v就为l1的值,此时l2已经为null,l1=l1.next
3.因为while中确保了l1和l2至少有一个不为null,所以,由1,2判断后,仍走到3,也即是l1和l2都不为null,
那么v就为**(l1+l2)**的值,此时 l1=l1.next,l2=l2.next
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = new ListNode(), l = new ListNode();
boolean flag = true;
boolean markup = true;
int oj = 0; //表示进位
int v = 0;
while(l1 != null || l2 != null) {
if(l1 == null) {
v = l2.val;
l2 = l2.next;
}else if( l2 == null) {
v = l1.val;
l1 = l1.next;
}else {
v = l1.val + l2.val;
l1 = l1.next;
l2 = l2.next;
}
// 看两者是否同时位空,只要一个不为空,那么就为true,直到两个都为空
markup = (l1==null && l2==null) ? false : true;
l.val = (v+oj) >= 10 ? (v+oj) % 10 : (v+oj);
if(flag) {head = l; flag = false;}
oj = (v+oj) / 10;
if(markup)
l = ( l.next = new ListNode() );
else {// 在l1和l2都为null时,如果oj不为0,那么就将oj放进节点中
l = oj > 0 ? ( l.next = new ListNode(oj) ) : null;
}
}
return head;
}
}



