1 Star 0 Fork 0

catyMap/AlgorithmNote

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
addTwoNumbers.go 1.73 KB
一键复制 编辑 原始数据 按行查看 历史
catyMap 提交于 2021-03-30 22:11 +08:00 . 未归类算法题目提交
package main
import "fmt"
func main() {
/* l1 , l2 ,l3 :=ListNode{Val: 2} , ListNode{Val: 4} , ListNode{Val: 3}
l1.Next , l2.Next , l3.Next = &l2 , &l3 , nil
b1 , b2 ,b3 := ListNode{Val: 5} , ListNode{Val: 6} , ListNode{Val: 4}
b1.Next , b2.Next , b3.Next = &b2 , &b3 , nil*/
l1 , l2 , l3 := ListNode{8,nil} , ListNode{9,nil} , ListNode{9,nil}
b1 := ListNode{2,nil}
l1.Next , l2.Next = &l2 , &l3
head := addTwoNumbers(&l1 , &b1)
for head != nil {
fmt.Print(head.Val, "----->")
head = head.Next
}
}
/*
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
*/
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
res := &ListNode{-1,nil}
head := res
/*用来表示进位数*/
positive := 0
for l1 != nil && l2 != nil {
positive += l1.Val + l2.Val
/*第一个节点特判*/
if res.Val < 0 {
res.Val = positive % 10
positive /= 10
l1 , l2 = l1.Next , l2.Next
continue
}
/*普通流程*/
next := ListNode{positive%10 ,nil}
res.Next = &next
res = res.Next
positive /= 10
l1 , l2 = l1.Next , l2.Next
}
rest := l1
if l1 == nil {
rest = l2
}
for rest != nil {
positive += rest.Val
next := ListNode{positive%10 , nil}
positive /= 10
rest = rest.Next
res.Next = &next
res = res.Next
}
if positive > 0 {
next := ListNode{1,nil}
res.Next = &next
}
return head
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/dogemap/algorithm-note.git
git@gitee.com:dogemap/algorithm-note.git
dogemap
algorithm-note
AlgorithmNote
dc486f96f6c1

搜索帮助