2. 两数相加 Golang

2. 两数相加

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
    return addList(l1, l2)
    // rL1 := reverseList(l1)
    // rL2 := reverseList(l2)
    // sumL := addList(rL1, rL2)
    // return sumL
    // return reverseList(sumL)
}

func addList(l1 *ListNode, l2 *ListNode) *ListNode {
    if l1 == nil && l2 == nil {
        return nil
    }
    addOne := 0
    nNode := new(ListNode)
    resNode := nNode
    pNode := nNode
    for l1 != nil && l2 != nil {
        pNode = nNode
        pNode.Val = (l1.Val + l2.Val + addOne) % 10
        addOne = (l1.Val + l2.Val + addOne) / 10
        nNode = new(ListNode)
        pNode.Next = nNode
        l1 = l1.Next
        l2 = l2.Next
    }
    for l1 != nil {
        pNode = nNode
        pNode.Val = (l1.Val + addOne) % 10
        addOne = (l1.Val + addOne) / 10
        nNode = new(ListNode)
        pNode.Next = nNode
        l1 = l1.Next
    }
    for l2 != nil {
        pNode = nNode
        pNode.Val = (l2.Val + addOne) % 10
        addOne = (l2.Val + addOne) / 10
        nNode = new(ListNode)
        pNode.Next = nNode
        l2 = l2.Next
    }
    for addOne != 0 {
        pNode = nNode
        pNode.Val = addOne
        addOne = 0
        nNode = new(ListNode)
        pNode.Next = nNode
    }
    pNode.Next = nil
    return resNode
}



func reverseList(l *ListNode) *ListNode {
    pNode := l
    if pNode == nil {
        return nil
    }
    cNode := pNode.Next
    pNode.Next = nil
    for cNode != nil {
        nNode := cNode.Next
        cNode.Next = pNode
        pNode = cNode
        cNode = nNode
    }
    return pNode
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容