2. 兩數相加(java)

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

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

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

示例:

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

思路:
既然沒有空間複雜度的要求,我們就重新建一個新的鏈表,要是用輸入的鏈表存數據會比較麻煩,要處理進位。設第一個鏈表爲l1,第二個鏈表爲l2.

  • 從兩個鏈表的第一位(個位)開始,將兩數相加(即x+y),注意如果某個鏈表的當前結點爲null,則將其值設爲0.
  • 如果兩個數相加超過10,則sum%10,注意到兩個鏈表的當前數最大爲9,而9+9=18,也就是說進位不是0就是1,因此jinwei=sum>=10?1:0;
  • 最後最重要的是要處理一個鏈表到達末尾,一個鏈表沒有到達末尾的情況。假設l1鏈表已經達到了末尾,就不可以l1=l1.next!!l2也一樣。
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		ListNode result=new ListNode(0);
		ListNode cur=result;
		int jinwei=0;
		while (l1!=null||l2!=null) {
			int x=l1==null?0:l1.val;
			int y=l2==null?0:l2.val;
			int sum=x+y+jinwei;
			jinwei=sum>=10?1:0;
			cur.next=new ListNode(sum%10);
			cur=cur.next;
			l1=l1==null?null:l1.next;
			l2=l2==null?null:l2.next;
		}
		if (jinwei!=0) {
			cur.next=new ListNode(jinwei);
		}
		return result.next;
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章