1. 程式人生 > 其它 >LeetCode 兩數相加

LeetCode 兩數相加

兩數相加

給你兩個非空 的連結串列,表示兩個非負的整數。它們每位數字都是按照逆序的方式儲存的,並且每個節點只能儲存一位數字。

請你將兩個數相加,並以相同形式返回一個表示和的連結串列。

你可以假設除了數字 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; } }