Go语言的LeetCode刷题之旅-002-两数相加

7 篇文章 0 订阅
5 篇文章 0 订阅

Go语言的LeetCode刷题之旅-02-两数相加


题目:

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

你可以假设除了数字 0 之外,这两个数字都不会以零开头。

示例:

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

思路:

(2 -> 4 -> 3)是 342

(5 -> 6 -> 4)是 465

(7 -> 0 -> 8)是 807

342 + 465 = 807

所以,题目的本意是,把整数换了一种表达方式后,实现其加法。

设计程序时候,需要处理的点有

位上的加法,需要处理进位问题
如何进入下一位运算
按位相加结束后,也还需要处理进位问题。


Go代码:

package problem0002

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
type ListNode struct {
    Val  int
    Next *ListNode
}

func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
    result := &ListNode{}
    temp := result
    v, n := 0, 0

    for {
        // 在当前位上进行加法运算
        v, n = add(l1, l2, n)
        temp.Val = v

        // 进入下一位
        l1 = next(l1)
        l2 = next(l2)
        // 如果两个数的下一位都为nil,则结束按位相加的运算
        if l1 == nil && l2 == nil {
            break
        }

        // 为下一位运算准备节点
        temp.Next = &ListNode{}
        temp = temp.Next
    }

    // n == 1 说明,最后一次加运算进位了,需要再添加一个节点。
    if n == 1 {
        temp.Next = &ListNode{Val: n}
    }

    return result
}

// next 进入l的下一位。
func next(l *ListNode) *ListNode {
    if l != nil {
        return l.Next
    }
    return nil
}

func add(n1, n2 *ListNode, i int) (v, n int) {
    if n1 != nil {
        v += n1.Val
    }

    if n2 != nil {
        v += n2.Val
    }

    v += i

    if v > 9 {
        v -= 10
        n = 1
    }

    return
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南易武痴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值