1. 程式人生 > >大整數相加連結串列實現(Add Two Numbers)

大整數相加連結串列實現(Add Two Numbers)

與其他實現不同點:常數空間複雜度,複用其中一條連結串列來儲存結果!

例子:

a:122349

b:43544

		public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
			if(null == l1){
				return l2;
			}
			
			if(null == l2){
				return l1;
			}
			
			// part 1兩個list都有值的部分
			ListNode from = l1;
			ListNode to = l2;
			ListNode result = l2;
			boolean leek = false;  						// last calc result >= 10 
			while(null != l1 && null != l2){
				l2.val = l1.val + l2.val + (leek?1:0);
				leek = l2.val >= 10;
				l2.val = l2.val % 10;
				if (l2.next == null || l1.next == null){
					break;
				}else {
					l2 = l2.next;
					l1 = l1.next;
				}
			}
			
			// part 2 
			if (null == l2.next && null == l1.next){
				// 兩個list等長
				if (leek){
					l2.next = new ListNode(1);
					return result;
				}
			}else if (null == l2.next && null != l1.next) {
				// l1較長
				l2.next = l1.next; // l2指到l1
				l2 = l1.next;  // 跳到下一位
			}else if (null != l2.next && null == l1.next) {
				// l2較長
				l2 = l2.next;  // 跳到下一位
			}
			
			// part 3 較長list進位處理
			while(l2 != null){
				l2.val = l2.val +  (leek?1:0);
				leek = l2.val >= 10;
				l2.val = l2.val % 10;
				if(l2.next == null){
					break;
				}else {
					l2 = l2.next;
				}
			}
			
			// part 4 最後的進位
			if (leek){
				l2.next = new ListNode(1);
			}
			
			return result;
		}
	


相關推薦

整數相加連結串列實現(Add Two Numbers)

與其他實現不同點:常數空間複雜度,複用其中一條連結串列來儲存結果! 例子: a:122349 b:43544 public ListNode addTwoNumbers(ListNode l1, ListNode l2) { if(null == l1){

兩個連結串列相加的和445. Add Two Numbers II

題目: You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of

Add Two Numbers 兩個連結串列相加 python

描述: You are given two linked lists representing two non-negative numbers. The digits are stored in reverseorder and each of their nodes contain a si

LeetCode Add Two Numbers兩個連結串列數值相加

Add Two Numbers You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of

[Leetcode #2]Add Two Numbers 連結串列儲存的兩個正數相加

原題地址:https://leetcode.com/articles/add-two-numbers/ 題目要求是:以連結串列形式儲存數字,低位在前,完成兩個數相加。例如342表示為2->4->3,465表示為5->6->4,兩個數相加的結果是807

Leetcode Add Two Numbers 兩個連結串列表示的數相加

題目: You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their no

Add Two Numbers(基於連結串列的兩數相加

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their node

[leetcode] add two numbers資料加法連結串列版)

Add Two Numbers You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and e

LeetCode2——Add Two Numbers(兩個連結串列中的數字相加,形成新連結串列

鄙人不才,故收錄LeetCode中的解法和程式碼。 題目: 參考解法: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *n

LeetCode | Add Two Numbers(兩個連結串列相加

題目: You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nod

整數相加 a+b 的c語言實現

pos -i += 有意義 size 大整數 int max 輸入 終於來到我所期盼的高精度整數相加的題目了。這個題很經典,也算是一個很好的算法入門題吧。 如果是java的話,系統類庫已經內置了BigInteger類,直接調用就可以很輕易地解決了。但是學習c的編寫也是非常有

【資料結構】【多項式連結串列實現相加

#include<bits/stdc++.h> using namespace std; const int inf = 0x3f3f3f3f; const int maxn = 1006; struct node { double coef; int exp; struct n

MFC版連結串列實現稀疏多項式相加

連結串列實現多項式運算(加減)MFC視覺化版 題目 設計一個一元稀疏多項式簡單計算器。 基本要求 (1)輸入並建立兩個多項式; (2)多項式a與b相加,建立和多項式c; (3)多項式a與b相減,建立差多項式d; (4)輸出多項式a, b, c, d。輸出格式:比如多項式a為:A(x)=c1xe1

[LeetCode] Add Two Numbers連結串列合併+模擬加法)

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and

漫畫:如何實現整數相加

在程式中列出的 “豎式” 究竟是什麼樣子呢?我們以 426709752318 + 95481253129 為例,來看看大整數相加的詳細步驟: 第一步,把整數倒序儲存,整數的個位存於陣列0下標位置,最高位存於陣列長度-1下標位置。之所以倒序儲存,更加符合我們從左到右訪問陣列的習慣。 第二步

【面試題】Java 2個(多個)整數相加如何實現

之前面試阿里的時候,第四面的時候面試官讓我當他面實現這個題目, 一開始的時候問的時候 2個相加如何實現,然後我寫完了之後又問我如果是多個相加呢?面試官希望我能在實現的時候能夠考慮到各種可能性,比如多個數相加,然後等我寫完了之後,又問我有沒有更好的實現方法;以下是我的實現方法; 將待相加

如何實現整數相加?@漫畫

/** * 大整數求和 * @param bigNumberA 大整數A * @param bigNumberB 大整數B */public static String bigNumberSum(String bigNumberA, String bigNumb

PAT乙級——1079(整數相加 迴文數判斷 邊界點)Java實現

題目:延遲的迴文數 (20 分) 給定一個 k+1 位的正整數 N,寫成 a​k⋯a1​​ a​0​​ 的形式,其中對所有 i 有 0 ≤ a​i​​ < 10 且 a​k > 0。N 被稱為一個迴文數,當且僅當對所有 i 有 a​i​​ = a​k − ai​​ 。零也

2. Add Two Numbers連結串列尾插法)

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their

實現整數相加

如果兩個很大很大的整數,大的連long型別都裝不下(比如兩個100位的整數),如何求出他們的和? 程式碼如下: public class BigNumSum { public static void main(String [] args){ System.out