看这道题,很多人反馈题看不懂? 建议如果看不懂题的时候,可以看下示例,示例是对题最好的解释。
看到示例,第一反应是用递归的方式,(虽然我没有用递归)。本题采用的是for循环遍历,跟递归其实本质是一样的,都是找到正确的结束位置。
// type ListNode struct {
// Val int
// Next *ListNode
// }
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
lresult := &ListNode{}
lresult.Next = nil
ltmp := lresult
vAdd := 0
for {
if l1 != nil && l2 != nil {
val := l1.Val + l2.Val + vAdd
vAdd = 0
if val >= 10 {
val = val - 10
vAdd = 1
}
ltmp.Val = val
} else if l1 != nil {
val := l1.Val + vAdd
vAdd = 0
if val >= 10 {
val = val - 10
vAdd = 1
}
ltmp.Val = val
} else if l2 != nil {
val := l2.Val + vAdd
vAdd = 0
if val >= 10 {
val = val - 10
vAdd = 1
}
ltmp.Val = val
}
if l1 != nil {
l1 = l1.Next
}
if l2 != nil {
l2 = l2.Next
}
if l1 == nil && l2 == nil {
break
}
ltmp.Next = &ListNode{Next: nil}
ltmp = ltmp.Next
}
if vAdd > 0 {
ltmp.Next = &ListNode{Val: 1, Next: nil}
}
return lresult
}
解决这道题其实没有太多的难点,主要要关注两数相加时进位。
看上面的实现,是需要一些基础知识的,比如什么是链表? 链表什么时候结束? 这些都是基础点,在这里就不再赘述。