美文网首页
两链表树相加

两链表树相加

作者: ES_KYW | 来源:发表于2020-09-16 16:48 被阅读0次

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

缺陷:int会溢出。其他方案:先比较长度,然后在较长的链表的for循环环境下,每一位的值相加,溢出的带入到下一个位的计算,将每一个计算值保存在切片中,最后for循环切片,重新构造链表

func addList(a *ListNode,b *ListNode) *ListNode {
    
    root_note := &ListNode{}
    a_arr := []int{}
    b_arr := []int{}

    temp_a := &ListNode{}
    temp_a.Next = a

    temp_b := &ListNode{}
    temp_b.Next = b

    for temp_a.Next != nil  {

        temp_a = temp_a.Next
        a_arr = append(a_arr,temp_a.Val)

    }

    for temp_b.Next != nil  {

        temp_b = temp_b.Next
        b_arr = append(b_arr,temp_b.Val)

    }

    // 将数组反转成数字
    var str_a = ""
    var str_b = ""

    for i := len(a_arr)-1;i>=0;i--{
        str_a = str_a + strconv.Itoa(a_arr[i])
    }
    for i := len(b_arr)-1;i>=0;i--{
        str_b = str_b + strconv.Itoa(b_arr[i])
    }

    int_a,_ := strconv.Atoi(str_a)
    int_b,_ := strconv.Atoi(str_b)

    var sum =int_a + int_b

    int_str := strconv.Itoa(sum)

    byte_arr :=[]byte(int_str)
    temp_note := &ListNode{}

    for i:=len(byte_arr)-1;i>= 0;i-- {

        if i < len(byte_arr)-1{
            note := &ListNode{}
            val,_ := strconv.Atoi(string(byte_arr[i]))
            note.Val = val
            temp_note.Next = note
            temp_note = note
        }else {

            val,_ := strconv.Atoi(string(byte_arr[i]))
            temp_note.Val = val
            root_note = temp_note
        }
    }
    fmt.Println(sum)
    fmt.Printf("%v",a_arr)
    fmt.Printf("%v",b_arr)
    fmt.Printf("%v",root_note.Val)
    fmt.Printf("%v",root_note.Next.Val)
    fmt.Printf("%v",root_note.Next.Next.Val)
    fmt.Printf("%v",root_note.Next.Next.Next.Val)
    return root_note
}
测试
func main() {

    a3 := &ListNode{}
    a3.Val = 4

    a2 := &ListNode{}
    a2.Val = 3
    a2.Next = a3

    a1 := &ListNode{}
    a1.Val = 2
    a1.Next = a2
    //
    a := &ListNode{}
    a.Val = 1
    a.Next = a1

    b3 := &ListNode{}
    b3.Val = 4

    b2 := &ListNode{}
    b2.Val = 2
    b2.Next = b3

    b1 := &ListNode{}
    b1.Val = 2
    b1.Next = b2

    b := &ListNode{}
    b.Val = 1
    b.Next = b1

    addList(a,b)
}
8542
[1 2 3 4][1 2 2 4]2458

相关文章

  • 两链表树相加

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只...

  • python常用算法(链表篇)

    链表类 两个链表相加

  • 链表 【两数相加】

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只...

  • 链表 两数相加

    https://leetcode-cn.com/explore/interview/card/bytedance/...

  • 链表:两数相加

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只...

  • 两数相加——链表

    题目 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个...

  • 链表--两数相加

    目录[https://www.jianshu.com/p/85e18c21317a] 题号[https://lee...

  • 445. Add Two Numbers II

    先对两个list 翻转后相加,然后把相加后的链表翻转返回

  • 高频算法题3

    链表相加 两数相加 有序数组中位数 数组中逆序对数 之字打印二叉树 数值的整数次方 单词拆分 接雨水 最长重复子数...

  • leetcode-0002

    题目: 2. 两数相加 关键词: 递归,进位,链表

网友评论

      本文标题:两链表树相加

      本文链接:https://www.haomeiwen.com/subject/cqlhyktx.html