两数相加 – LeetCode2

题目

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
提示:
每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零

题解

golang

func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
	// 定义结果链表头指针
	var head *ListNode

	// 定义结果链表尾指针
	tail := &ListNode{}

	// carry 用于保存进位
	carry := 0
	for l1 != nil || l2 != nil {
		// 依次获取l1, l2 相同位置的值,n1, n2
		n1, n2 := 0, 0
		if l1 != nil {
			n1 = l1.Val
			l1 = l1.Next
		}
		if l2 != nil {
			n2 = l2.Val
			l2 = l2.Next
		}

		// n1, n2 以及 carry(上一位计算的进位) 求和,与10的余数,则为最终结果该位上的值,除10的值,则为进位,用carry存储
		// 例如 19 + 6, 第一步: n1 = 9, n2 = 6, carry = 0, 最终结果个位为 5,进位1 (carry = 1) 第二步: n1 = 1, n2 = 0, n1 + n2 + carry = 2
		// 最终结果: 19 + 6 = 25
		sum := n1 + n2 + carry
		sum, carry = sum % 10, sum / 10
		if head == nil {
			head = &ListNode{Val: sum}
			tail = head
		} else {
			tail.Next = &ListNode{Val: sum}
			tail = tail.Next
		}
	}

	// 若各位皆已经计算,但carry中还有值,则最高位为carry. 例如: 98 + 9 = 107 (carry = 1)
	if carry > 0{
		tail.Next = &ListNode{Val: carry}
	}
	return head
}

相关链接

https://leetcode-cn.com/problems/add-two-numbers

精选应用推荐

安全便捷的密码管理工具
安全加密 跨设备同步 一键填充 免费使用
云幻梦密码本 - 安全密码管理
★★★★★
4.8 (12万+评价)
云幻梦密码本是一款专业级密码管理工具,采用银行级加密技术保护您的所有密码和个人信息。支持跨设备同步、一键自动填充、安全密码生成和生物识别登录等功能,让您的数字生活更加安全便捷。
应用截图
📦 68.5 MB
🔄 版本 2.5.1
📱 Android 8.0+
500万+下载

资源搜索推荐

一站式资源搜索平台
资源搜索 多源聚合 免费使用 无广告
千搜123 | 资源搜索
🔍
智能搜索
📁
多类资源
快速响应
🛡️
安全访问
千搜123是一个强大的资源搜索网站,聚合了多种资源搜索引擎,提供文档、软件、影视、音乐、学习资料等多种资源的快速搜索服务。界面简洁无广告,搜索结果精准,是您寻找各类资源的得力助手。
  • 聚合多个优质资源搜索引擎,一站式搜索
  • 支持文档、软件、影视、学习资料等多种资源类型
  • 界面简洁,无干扰广告,专注搜索体验
  • 搜索结果快速准确,节省您的时间
🌐 网站访问
无需下载
📅 持续更新
👨‍💻 免费服务

0 评论
最新
最旧 最多投票
内联反馈
查看所有评论
滚动至顶部