給你兩個表示自然數的Linklist,他存儲的方式為反序的形式,且每一個node代表一個位數。
請將此兩數相加後,以同樣的形式輸出。
範例:
l1=(2 -> 4 -> 3),l2=(5 -> 6 -> 4)
ans=(7 -> 0 -> 8)
兩兩相加後,再處理進位問題。
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* compute = new ListNode(l1->val+l2->val);
ListNode* ans=compute;
while(l1->next||l2->next)
{
if(l1->next&&l2->next)
{
l1=l1->next;
l2=l2->next;
compute->next = new ListNode(l1->val+l2->val);
}
else if(l1->next)
{
l1=l1->next;
compute->next = new ListNode(l1->val);
}
else
{
l2=l2->next;
compute->next = new ListNode(l2->val);
}
compute=compute->next;
}
compute=ans;
while(compute->next)
{
if(compute->val>=10)
{
compute->val-=10;
compute->next->val+=1;
}
compute=compute->next;
}
if(compute->val>=10)
{
compute->val-=10;
compute->next= new ListNode(1);
}
return ans;
}
};
驟看這題,我原先想著也許將他轉換為int相加後再寫成Linklist會比較好寫。
但還是覺得得先挑戰看看,而且一開始進位寫在相加裡面,所以要考慮的因素很多,反而最後亂成一套。
結果寫著寫著全刪了,換成原先覺得會比較簡單的int,卻發現更難下手?
所以轉回去使用Linklist的相加,結果不到一小時就又解出來了?
我以前用Linklist是因為想要實作資料結構,所以簡單的照著書打過。
不過實際操作在題目裡還是第一次,並不是很熟練,所以還測試了一下。(如何新增、如何顯示)
結論:資料結構要好好的學。