文章標題

leetcode

  1. Add Two Numbers
    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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章