題目來自於leetcode()。
1、給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。
如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
示例:輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
注:這道題有助於理解鍊錶,幫助複習鍊錶的操作
解法一:暴力法(耗時12 ms,記憶體5.7m,後期看能否優化)
先講兩個鍊錶中的值取出來,分別存在slice中。比較兩個slice的長度,進行調換(將長度長的賦值給a,端的給b)。迴圈相加,並將結果存入a中(這裡設定了乙個標桿 j ,用來表示上一輪迴圈是否大於等於10)。最後迴圈a,將結果一一放入到鍊錶中(這裡需要在裡面取到鍊錶的尾部)。
**如下:
/**
* definition for singly-linked list.
* type listnode struct
*/func addtwonumbers(l1 *listnode, l2 *listnode) *listnode else
}var b int
for else
}alen := len(a)
blen := len(b)
j := 0
//檢測長度,符合條件,則交換變數值,並重新獲得長度值
if alen < blen
for i:=0;i= 10 else
}for m:=blen;m= 10 else
}//最後接測j,大於0說明最後兩個元素相加大於10
if j > 0
var l3 = &listnode
l5 := l3 //這裡賦值,因為是指標,所以l3的更改能體現到l5上,最後返回l5
for _,v := range a
var l4 = new(listnode)
l4.val = v
l4.next = nil
l3.next = l4
l3 = l3.next //將l3的指標指向鍊錶尾部
}return l5
}
leetcode刷題 兩數相加
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...
leetCode 刷題 兩數相加
刷題第一天 兩數之和 原題目 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 ...
LeetCode刷題日記之兩數相加
給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原...