LeetCode 兩數相加
阿新 • • 發佈:2021-07-16
兩數相加
給你兩個非空 的連結串列,表示兩個非負的整數。它們每位數字都是按照逆序的方式儲存的,並且每個節點只能儲存一位數字。
請你將兩個數相加,並以相同形式返回一個表示和的連結串列。
你可以假設除了數字 0 之外,這兩個數都不會以 0開頭。
示例 2:
輸入:l1 = [0], l2 = [0]
輸出:[0]
示例 3:
輸入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
輸出:[8,9,9,9,0,0,0,1]
來源:力扣(LeetCode)
/** * 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; } * }*/ import java.lang.Math; class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
if(l1==null&&l2==null)return null;
ListNode list=new ListNode(0); ListNode head=list; //類似於一個指標的作用 int addnum=0; //這裡就是進位數
//這裡也很好理解 如果兩個連結串列的節點都為空了也就說明 遍歷結束了 就不需要在進行執行 addnum不等於0 這裡主要是為了連結串列最後一個節點相相加完後有進位 如果不加這個條件 會丟失進位
while(l1!=null||l2!=null||addnum!=0)
{ int a1=l1!=null?l1.val:0; //這裡就是當遇到兩個數長度不相等的時候 某一連結串列的節點為空時給其賦值0方便後面運算 int a2=l2!=null?l2.val:0; head.next=new ListNode((a1+a2+addnum)%10); //將相加模10後的結果新增到list的尾部節點 head=head.next; //指標後移 addnum=(a1+a2+addnum)/10; //獲取進位 if(l1!=null)l1=l1.next; //l1後移 if(l2!=null)l2=l2.next; //l2後移 } return list.next; } }