算法之鏈表求和

問題描述

給定兩個用鏈表表示的整數,每個節點包含一個數位。
這些數位是反向存放的,也就是個位排在鏈表首部。
編寫函數對這兩個整數求和,並用鏈表形式返回結果。
示例:

輸入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
輸出:2 -> 1 -> 9,即912

方法一

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        //在相加過程中是否出現進位
        boolean isCarry = false;
        ListNode dumpy = new ListNode(-1);
        ListNode tmp = dumpy;
        while(l1!=null||l2!=null){
        	//記錄當前 位上的值,默認爲0
            int  x = 0,y = 0;
            if(l1!=null){
                x = l1.val;
                l1 = l1.next;
            }
            if(l2!=null){
                y = l2.val;
                l2 = l2.next;
            }
            //求和並且判斷是否有進位
            int result = x + y;
            if(isCarry){
                result++;
            }
            if(result>9){
                isCarry = true;
            }else{
                isCarry = false;
            }
            //記錄結果值
            tmp.next = new ListNode();
            tmp.next.val = result%10;
            tmp = tmp.next;  
        }

        if(isCarry){
            tmp.next = new ListNode();
            tmp.next.val = 1;
            tmp = tmp.next;  
        }

        return dumpy.next;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章