美文网首页
leetCode题2-两数相加

leetCode题2-两数相加

作者: GoSnail | 来源:发表于2020-09-05 22:29 被阅读0次

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

示例:

输入(2->4->3)+(5->6->4)

输出:7->0->8

原因:342+465=807

解题思路:

1、分别遍历两个链表p与q,因为逆序的,为我们运算提供了方便,只要让Ai和Bi相加即可

2、将Ai与Bi相加然后取余数,即为新计算的个位数,然后对Ai+Bi做除10操作,得到的数作为进位(程序中我们用flag标记),

3、然后进行p=p.next q=q.next ,程序结束条件为p q均为nil。

4、当p q均为nil时,切记不要直接返回,这里要考虑到如果此时有进位的情况,也就是我们算数学的时候比如5+5的时候,个位数为0,但是十位数为1;因此此时要判断是否flag=1,如果=1,则插入一个节点,然后才生成一个完整的链表。

下面按照这个思路上代码:

type Nums struct {

    Num int

    Next *Nums

}

func NewNums(src []int) *Nums {

        var head, tmp *Nums

       for _, v :=range src {

            if head ==nil {    //第一个节点头节点,也可以哨兵的写法,浪费一个节点空间,用空节点

                head = &Nums{v, nil}

                tmp = head

                continue

          }

        n := &Nums{v, nil}

        tmp.Next = n

        tmp = n

       }

    return head

}

//方便打印,自己写了个println函数

func Println(head *Nums) {

    for {

        if head !=nil {

            fmt.Printf("%d", head.Num)

            head = head.Next

            if head !=nil {

                fmt.Printf("->")

            }

            continue

      }

    fmt.Println()

    break

  }

}

func LeetCode2(p, q *Nums) (*Nums, error) {

    var pv int

      var qv int

      var flag int

       var head, tmp *Nums

       for p !=nil || q !=nil {

            pv =0

             qv =0

              if p !=nil {

                    pv = p.Num

            }

            if q !=nil {

                qv = q.Num

            }

            if head ==nil {

                head = &Nums{(pv + qv + flag) %10, nil}

                tmp = head

            }else {

                t := &Nums{(pv + qv + flag) %10, nil}

                tmp.Next = t

                tmp = tmp.Next

            }

        flag = (pv + qv + flag) /10

      if p !=nil {

            p = p.Next

    }

    if q !=nil {

        q = q.Next

    }

    if p ==nil && q ==nil {

        //todo 判断flag是否为1,如果为1,补一个节点

            if flag ==1 {

                    t := &Nums{flag, nil}

                    tmp.Next = t

            }

            return head, nil

          }

    }

    return nil, errors.New("list error!!!")

}

相关文章

  • leetCode题2-两数相加

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

  • [LeetCode]2-两数相加

    2. 两数相加给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返...

  • Python小白 Leetcode刷题历程 No.1-No

    Python小白 Leetcode刷题历程 No.1-No.5 两数之和、两数相加、无重复字符的最长子...

  • LeetCode | 2.两数相加

    这次来写一下 LeetCode 的第 2 题,两数相加。 题目描述 题目直接从 LeetCode 上截图过来,题目...

  • leetcode算法-2-两数相加

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

  • LeetCode算法题:两数相加

    需求 两数相加: 思路 链表是倒序存储数值,432 在链表存储是2-3-4,当求和之后,还需将值转成链表,1.根据...

  • LeetCode刷题-两数相加

    前言说明 算法学习,日常刷题记录。 题目连接 两数相加[https://leetcode-cn.com/probl...

  • LeetCode第2题题解:两数相加

    LeetCode第2题:两数相加 Ps:本系列文章只为记录自己刷LeetCode过程中的解题过程和思路。 题目来源...

  • LeetCode题解2-两数相加(Java)

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

  • 两数相加 II(golang)

    原题:两数相加 II 使用栈,其它与两数相加(golang)类似

网友评论

      本文标题:leetCode题2-两数相加

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