前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2. 两数相加

2. 两数相加

原创
作者头像
Michel_Rolle
修改2021-03-01 14:44:50
2.2K0
修改2021-03-01 14:44:50
举报
文章被收录于专栏:LeetCode解题

2. 两数相加

链接

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

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

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

示例:

代码语言:txt
复制
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
代码语言:txt
复制
type ListNode struct {
	Val  int
	Next *ListNode
}

func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
	resPre := &ListNode{}
	cur := resPre
	carry := 0

	for l1 != nil || l2 != nil || carry > 0 {
		sum := carry

		if l1 != nil {
			sum += l1.Val
			l1 = l1.Next
		}

		if l2 != nil {
			sum += l2.Val
			l2 = l2.Next
		}

		carry = sum / 10

		cur.Next = &ListNode{Val: sum % 10}
		cur = cur.Next
	}

	return resPre.Next
}

// 递归实现
func addTwoNumbers2(l1 *ListNode, l2 *ListNode) *ListNode {
    return addTwoNumber(l1, l2, 0)
}

func addTwoNumber(l1 *ListNode, l2 *ListNode, add int) *ListNode{
    if l1 == nil && l2 == nil && add == 0 {
        return nil;
    }

    if l1 != nil {
        add += l1.Val
        l1 = l1.Next
    }
    if l2 != nil {
        add += l2.Val
        l2 = l2.Next
    }

    node := ListNode{
        Val: add % 10,
        Next: addTwoNumber(l1, l2, add / 10),
    }

    return &node
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2. 两数相加
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档