LeetCode445. 两数相加II
1. 问题描述
2. 思路
本题的主要难点在于链表中数位的顺序与我们做加法的顺序是相反的,为了逆序处理所有数位,我们可以使用栈:把所有数字压入栈中,再依次取出相加。计算过程中需要注意进位的情况。
3. 代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
var s1 []int
var s2 []int
for l1 != nil {
s1 = append(s1, l1.Val)
l1 = l1.Next
}
for l2 != nil {
s2 = append(s2, l2.Val)
l2 = l2.Next
}
var carry int
var ans *ListNode
for len(s1) != 0 || len(s2) != 0 || carry != 0 {
var a, b int
if len(s1) == 0 {
a = 0
} else {
a = s1[len(s1) - 1]
}
if len(s2) == 0 {
b = 0
} else {
b = s2[len(s2) - 1]
}
if len(s1) != 0 {
s1 = s1[:len(s1) - 1]
}
if len(s2) != 0 {
s2 = s2[:len(s2) - 1]
}
cur := a + b + carry
carry = cur / 10
cur = cur % 10
curNode := &ListNode{Val:cur}
curNode.Next = ans
ans = curNode
}
return ans
}