天天看點

leetcode【每日一題】2. 兩數相加 java題幹想法Java代碼我的leetcode代碼都已經上傳到我的githttps://github.com/ragezor/leetcode

題幹

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

如果,我們将這兩個數相加起來,則會傳回一個新的連結清單來表示它們的和。

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

示例:

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

想法

模拟加法

每個位置是對應listnode值加上進位

都從兩個node頭開始周遊,如果一個完了另一個沒完,就單獨加另一個即可

注意循環完成如果進位仍不為0

那就再加個值為進位的頭節點

Java代碼

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if(l1==null){
            return l2;
        }
        if(l2==null){
            return  l1;
        }
        int tem=(l1.val+l2.val)%10;
        int plus=(l1.val+l2.val)/10;

        ListNode res=new ListNode(tem);
        ListNode head=res;
        while (l1.next!=null&&l2.next!=null){
            l1=l1.next;
            l2=l2.next;
             tem=(l1.val+l2.val+plus)%10;
             res.next=new ListNode(tem);
             res=res.next;
            plus=(l1.val+l2.val+plus)/10;
        }
        while (l1.next!=null){
            l1=l1.next;
            tem=(l1.val+plus)%10;
            res.next=new ListNode(tem);
            res=res.next;
            plus=(l1.val+plus)/10;
        }
        while (l2.next!=null){
            l2=l2.next;
            tem=(l2.val+plus)%10;
            res.next=new ListNode(tem);
            res=res.next;
            plus=(l2.val+plus)/10;
        }
        if(plus!=0){
            res.next=new ListNode(plus);
        }
        return  head;

    }
}
           

我的leetcode代碼都已經上傳到我的githttps://github.com/ragezor/leetcode

繼續閱讀