Leetcode 两数相加

212 阅读1分钟
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
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
}