#leetcode
2. Add Two Numbers
级别 medium
写了简单的链表合并算法通俗易懂
对题目的理解为两个方面
1.合并节点值大于等于10时,需要对后面节点进一位,进位还可能后导致的再进位如:1+9等
2.这里采用的是用l1节点就地合并,所以有两种情况l1.length>l2.length;l2到达尽头后需要后续进一位时l1有可能连续进位,所以在初步合并后还需while自增
l1.length<=l2.length时,则只需要插入尾部(k值用来保留l1的尾部节点)
source code:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode p,q,k;
k = null;
p = l1;
q = l2;
while(p!=null&&q!=null){
p.val += q.val;
if(p.val >= 10){
p.val %= 10;
if(p.next!=null){
p.next.val += 1;
}else{
p.next = new ListNode(1);
}
}
if(p.next == null){
k = p;
}
p = p.next;
q = q.next;
}
while(p!=null){
if(p.val >= 10){
p.val %= 10;
if(p.next!=null){
p.next.val += 1;
}else{
p.next = new ListNode(1);
}
}
p = p.next;
}
if(q!=null){
if(p==null){
p = k;
}
p.next = q;
}
return l1;
}
}