Leecode刷題日記2-兩數相加【Java】

兩數相加

1.題目描述

給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,並且它們的每個節點只能存儲 一位 數字。

如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。

您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。

示例:

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807

2.思路

這是在用鏈表做加法,注意進位即可。考查的是鏈表的基礎知識,創建、遍歷鏈表。需要考慮鏈表爲空的情況。

3.解法

初次嘗試,使用此解法雖然解決了問題,但是代碼可讀性較差

 public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head = new ListNode(0);
         ListNode result = head;
        do{
             int nullTag = 0;
             int increase = 0;
            if(l1!=null){
                result.val+=l1.val;
                if(l1!=null)l1 = l1.next;
            }else{
                nullTag +=1;
            }
            if(l2!=null){
                 result.val+=l2.val;
                 if(l2!=null)l2 = l2.next;
            }else{
                 nullTag +=1;
            }
            increase = result.val/10;
            result.val = result.val%10;
            
            if(nullTag==2){ //需要退出循環
                if(increase!=0){
                    result.next = new ListNode(increase);
                    result = result.next;
                }
                return head;
            }else{
                 if(l1==null&&l2==null&&increase==0){
                     continue;
                 }else{
                    result.next = new ListNode(increase);
                    result = result.next;   
                 }
                  
            }
        }while(true);
    }

稍作優化如下:

  public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head = new ListNode(0);
         ListNode currentNode = head;
         int curry=0; //進位
         while(l1!=null||l2!=null||curry!=0){
            if(l1!=null){
                  currentNode.val+=l1.val;
                  l1 = l1.next;
            }
            if(l2!=null){
                  currentNode.val+=l2.val;
                   l2 = l2.next;
            }
            curry = currentNode.val/10;
            currentNode.val = currentNode.val%10;
            if(l1!=null||l2!=null||curry!=0){//如果後續沒有操作數了,則不再進位,處理多0的情況
                currentNode.next = new ListNode(curry);
                currentNode = currentNode.next; 
            }     
         }
         return head;
         }

儘量讓代碼優雅,保持良好習慣!

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