2两数相加解题记录
哎呀,以为这道题也不用写题解的……结果还是有坑没跳出来。
最开始想法先计算总和再求出链表
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
// 先算出这个值。测试用例会int类型溢出
total := 0
wei := 1
for l1!=nil && l2!=nil {
total += (l1.Val+l2.Val)*wei // 进位也是正确的
l1 = l1.Next
l2 = l2.Next
wei *= 10
}
for l1!=nil {
total += l1.Val*wei
l1 = l1.Next
wei *= 10
}
for l2!=nil {
total += l2.Val*wei
l2 = l2.Next
wei *= 10
}
fmt.Println(total)
// 将total转换为链表
res := &ListNode{}
curr := res
for total != 0 {
// fmt.Println(total)
curr.Val = total%10
total /= 10
if total !=0 {
curr.Next = &ListNode{}
curr = curr.Next
}
}
return res
}
var total int64
还是会溢出得用big.Int
还是直接链表相加吧,记得保存进位就好了
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
dummy := &ListNode{}
curr := dummy
carry := 0
for l1 != nil || l2 != nil || carry != 0 {
sum := carry
if l1 != nil {
sum += l1.Val
l1 = l1.Next
}
if l2 != nil {
sum += l2.Val
l2 = l2.Next
}
carry = sum / 10
curr.Next = &ListNode{Val: sum % 10}
curr = curr.Next
}
return dummy.Next
}