2. Add Two Numbers

題目2. Add Two Numbers

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

1
public class Solution {
 private long getValue(ListNode list){
        long value = 0;
        int pow = 0;
        while(list != null){
            value = (long) (value+Math.pow(10, pow)*list.val);
            list = list.next;
            pow++;
        }
        return value;
    }

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if(l1 == null && l2 == null){
            return null;
        }
        
        long result = getValue(l1) + getValue(l2);
        
        if(result == 0){
            return new ListNode(0);
        }
        
        ListNode head = new ListNode(-1);
        ListNode tail = head;
        
        while(result > 0){
            ListNode temp = new ListNode((int) (result % 10));
            tail.next = temp;
            tail = temp;
            
            result /= 10;
        }
        return head.next;
    }
  
}
2,簡潔的寫法
public class Solution {
  public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode prev = new ListNode(0);
        ListNode head = prev;
        int carry = 0;
        while (l1 != null || l2 != null || carry != 0) {
            ListNode cur = new ListNode(0);
            int sum = ((l2 == null) ? 0 : l2.val) + ((l1 == null) ? 0 : l1.val) + carry;
            cur.val = sum % 10;
            carry = sum / 10;
            prev.next = cur;
            prev = cur;

            l1 = (l1 == null) ? l1 : l1.next;
            l2 = (l2 == null) ? l2 : l2.next;
        }
        return head.next;
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容