iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 8
0
自我挑戰組

有志者,事竟成。系列 第 8

Day8 第三十二題 LeetCode #2 Add Two Numbers

第三十二題 LeetCode #2 Add Two Numbers

題目描述

給你兩個表示自然數的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是因為想要實作資料結構,所以簡單的照著書打過。
不過實際操作在題目裡還是第一次,並不是很熟練,所以還測試了一下。(如何新增、如何顯示)
結論:資料結構要好好的學。


上一篇
Day 7 第三十一題 - LeetCode Two Sum
下一篇
Day9 第三十三題 LeetCode #3 Longest Substring Without Repeating Characters
系列文
有志者,事竟成。19

尚未有邦友留言

立即登入留言