欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 20241107,LeetCode 每日一题,使用 Go 计算两数相加

20241107,LeetCode 每日一题,使用 Go 计算两数相加

2025/10/21 13:08:30 来源:https://blog.csdn.net/github_37151951/article/details/143579031  浏览:    关键词:20241107,LeetCode 每日一题,使用 Go 计算两数相加

思路

  1. 模拟加法:链表存储的是逆序数位,因此从头节点开始,逐位相加可以模拟正常的加法。每两个节点的值相加,并记录进位。

  2. 逐节点相加

    • 创建一个新的链表,用于存储结果,每次将两个链表对应节点的值加上进位值,结果存储到新链表的节点中。
    • 计算过程中,将(l1.Val + l2.Val + carry)相加的结果拆成两个部分,一部分是当前位的值,另一部分是进位值(例如:(l1.Val + l2.Val + carry) / 10)。
  3. 处理进位:若最终计算完链表后进位不为0,则在结果链表末尾增加一个新节点表示进位。

  4. 边界条件:若链表长度不一,则将缺少的部分视为0;同时确保最后若存在进位,将其单独处理。

代码


type ListNode struct {Val  intNext *ListNode
}func addTwoNumbers(l1 *ListNode, l2 *ListNode) (head *ListNode) {var tail *ListNodecarry := 0for l1 != nil || l2 != nil {var val1, val2 intif l1 != nil {val1 = l1.Vall1 = l1.Next}if l2 != nil {val2 = l2.Vall2 = l2.Next}sum := val1 + val2 + carrysum, carry = sum%10, sum/10if head == nil {head = &ListNode{sum, nil}tail = head} else {tail.Next = &ListNode{sum, nil}tail = tail.Next}if l1 == nil && l2 != nil {tail.Next = l2break}if l1 != nil && l2 == nil {tail.Next = l1break}}if carry > 0 {tail.Next = &ListNode{carry, nil}}return
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词