刷个题-两数相加

LEECODE题:

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

附上递归方法

package main

import "fmt"

type ListNode struct {
    Val int
    Next *ListNode
}

func addTwoNode(mL1,mL2 *ListNode)*ListNode{
    if mL1 ==nil && mL2 == nil{
        return nil
    }
    if mL1 ==nil{
        return mL2
    }
    if mL2 == nil{
        return mL1
    }
    sum := mL1.Val + mL2.Val
    nextNode := addTwoNode(mL1.Next,mL2.Next)
    if sum<10{
        return &ListNode{Val:sum,Next:nextNode}
    }else {
        tempNode := &ListNode{
            Val:1,
            Next:nil,
        }
        return &ListNode{
            Val:sum-10,
            Next:addTwoNode(nextNode,tempNode),
        }
    }
}

func main() {
    //测试结果:
    mL1 := makeListNode([]int{2,4,3})
    mL2 := makeListNode([]int{5,6,4})
    mSum := addTwoNode(mL1,mL2)
    fmt.Println("\nmSum:")
    for mSum!=nil{
        fmt.Printf("%v ",mSum.Val)
        mSum = mSum.Next
    }
}

func makeListNode(nums []int) *ListNode  {
    if len(nums)==0{
        return nil
    }
    res := &ListNode{
        Val:nums[0],
    }
    temp := res
    for i:=1;i

测试结果


刷个题-两数相加_第1张图片
image.png

你可能感兴趣的:(刷个题-两数相加)