func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
return _addTwoNumbers(l1, l2, 0)
}
func _addTwoNumbers(l1, l2 *ListNode, carry int) *ListNode {
if l1 == nil && l2 == nil && carry == 0 {
return nil
}
val := getNodeVal(l1) + getNodeVal(l2) + carry
if val >= 10 {
val = val - 10
carry = 1
} else {
carry = 0
}
var node *ListNode
if l1 != nil {
node = l1
} else if l2 != nil {
node = l2
} else {
node = new(ListNode)
}
node.Val = val
node.Next = _addTwoNumbers(getNodeNext(l1), getNodeNext(l2), carry)
return node
}
func getNodeVal(node *ListNode) int {
if node == nil {
return 0
}
return node.Val
}
func getNodeNext(node *ListNode) *ListNode {
if node == nil {
return nil
}
return node.Next
}