GO 两数相加
Feb 27, 2022
GO-两数相加
题目
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
解题
-
此题只设计到加法,小学数学,并无可怕,不要慌
-
按照小学数学的解法,我们在草稿纸上写出解题过程
-
发现,其实就是,两个数组的第 N 项各自相加,再加上次结果的进数,然后将每一次的结果,都绑定到上一次的身上(除了第一次)
-
记得每次循环结束后,就要将 l1、l2 变量替换成下一个项
-
看代码,是直接返回 currentList.Next ,头次对象就是一个壳子,为的是可以成功与下次结果关联上
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
var listNode = &ListNode{
Val:-1,
Next:nil,
}
currentList := listNode
var sum,per = 0,0
for {
if l1 == nil && l2 == nil{
break;
}
// 将两项先相加,然后加上上次计算的进数
// 即如果上一次计算的结果超过了 10,那么本次结果,就需要加上 1,
sum = l1.Val + l2.Val + per
// 头次结果只是一个壳子,这样里这样做,目的是每次循环的时候,都可以与下一次的结果关联上
currentList.Next = &ListNode{
// 余数就是本次计算的结果
Val:sum % 10,
Next:nil,
}
currentList = currentList.Next
if l1 != nil {
l1 = l1.Next
}
if l2!= nil{
l2 = l2.Next
}
// 商就是本次计算的进数
per = sum / 10
}
return listNode.Next
}