leetcode
- 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;
}
}