445 兩數相加 II

2021-09-29 08:56:05 字數 1532 閱讀 4905

這種題的用例是一定會搞一些很大的數的。long都會溢位,所以我們就不用嘗試轉數字做加法轉鍊錶的方法了。另外直接倒置兩個鍊錶再做加法的做法會改變原鍊錶,題幹也說了禁止改動原鍊錶。

1.求兩個鍊錶長度,如果一長一短,把短的前面加若干個0節點,使得兩個鍊錶長度相同。之後對於就遞迴連線鍊錶。dfs函式引數為前乙個結果鍊錶指標pre,當前的兩個資料鏈表指標p1、p2。在函式中首先新建節點與pre相連,之後遞迴p1、p2的後繼鍊錶。dfs函式返回的是進製值,1或0。遞迴函式的進製值返回後要加在當前節點val上,若有進製繼續返回給上級節點。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

int len1=

0,len2=0;

listnode* p=l1;

while

(p) p=l2;

while

(p) p=

newlistnode(0

);listnode* n_head=p;

for(

int i=

1;i<

abs(len1-len2)

;++i)

if(len1

else

if(len1>len2)

listnode* res=

newlistnode(1

);//incase sum of l1 and l2 >9

int c=

dfs(res,l1,l2);if

(c==1)

else

}int

dfs(listnode* pre, listnode* p1,listnode* p2)

}return carry;}}

;

2.用兩個棧存兩個鍊錶倒序的值。思路是我們做加法是從小位加到大位,故考慮用棧可以方便的倒置位數。
/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

while

(l2)

listnode* head=0;

int carry=0;

while

(!stack1.

empty()

or!stack2.

empty()

or carry)if(

!stack2.

empty()

)if(p->val>9)

else

p->next=head;

head=p;

}return head;}}

;

445 兩數相加 II

演算法 由於鍊錶資料相加是逆序的,可以通過棧來儲存鍊錶資料,棧是先進後出,順序就變成了從末位相加,其實本題難度不大,就是不太容易想到使用棧來存資料計算。definition for singly linked list.public class listnode class solution tem...

445 兩數相加 II

445.兩數相加 ii 2.兩數相加 的擴充套件 definition for singly linked list.public class listnode class solution if c 0 return reverselist dummy.next 易錯點 優化 插入新煉表時可以採用...

445 兩數相加 II

題目描述 給你兩個 非空 鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存一位數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。高階 如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。示例 輸入 7 2 4 3...