Leetcode #2. Add Two Numbers
簡單來說就是要做兩個鏈結的加總
ex.1
Input: list 1: 2->4->3, list 2: 5->6->4
Output: [7,0,8]
342 + 465 = 807 (個位數在鏈結的最左邊)
如果你沒做過這題,強烈建議你先思考一下怎麼解。
防雷
防雷
防雷
這一題主要讓你熟悉鏈結的操作,只要搞懂了鏈結,花點時間就可以寫出來。
只要每一次加總,處理一下進位,應該就可以解決了,時間複雜度為O(n)
程式:
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
node := &ListNode{}
temp := node
curry := 0 // 記錄有沒有進位
for {
// 兩個鏈結長度可能不一樣,只要一邊有東西,還是要加總下去
if l1 == nil && l2 == nil {
break
}
num := 0
if l1 != nil {
num += l1.Val
l1 = l1.Next
}
if l2 != nil {
num += l2.Val
l2 = l2.Next
}
// 判斷進位
num += curry
if num >= 10 {
num = num % 10
curry = 1
} else {
curry = 0
}
temp.Next = &ListNode{
Val: num,
}
temp = temp.Next
}
if curry == 1 {
temp.Next = &ListNode{
Val: 1,
}
}
return node.Next
}
明天來講Queue & Stack!