版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010168781/article/details/89638853
一、问题描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
二、go语言
1、方法一
// leetcode-2
package main
import (
"fmt"
)
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
type ListNode struct {
Val int
Next *ListNode
}
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
var head *ListNode = new(ListNode)
var end *ListNode = head
var tmp1 *ListNode = l1
var tmp2 *ListNode = l2
var carry int = 0
for tmp1 != nil && tmp2 != nil {
sun := tmp1.Val + tmp2.Val + carry
end.Next = new(ListNode)
end = end.Next
end.Val = sun % 10
carry = sun / 10
tmp1 = tmp1.Next
tmp2 = tmp2.Next
}
for tmp1 != nil {
sun := tmp1.Val + carry
end.Next = new(ListNode)
end = end.Next
end.Val = sun % 10
carry = sun / 10
tmp1 = tmp1.Next
}
for tmp2 != nil {
sun := tmp2.Val + carry
end.Next = new(ListNode)
end = end.Next
end.Val = sun % 10
carry = sun / 10
tmp2 = tmp2.Next
}
if carry != 0 {
end.Next = new(ListNode)
end = end.Next
end.Val = carry
}
return head.Next
}
func main() {
var l1 *ListNode = new(ListNode)
var l2 *ListNode = new(ListNode)
var tmp1 *ListNode = l1
var tmp2 *ListNode = l2
l1.Val = 9
l2.Val = 4
for i := 0; i < 10; i++ {
tmp1.Next = new(ListNode)
tmp1 = tmp1.Next
tmp1.Val = i
tmp2.Next = new(ListNode)
tmp2 = tmp2.Next
tmp2.Val = i
}
sun := addTwoNumbers(l1, l2)
fmt.Print("l1 = ")
for l1 != nil {
fmt.Printf("[%d]", l1.Val)
l1 = l1.Next
}
fmt.Println("")
fmt.Print("l2 = ")
for l2 != nil {
fmt.Printf("[%d]", l2.Val)
l2 = l2.Next
}
fmt.Println("")
fmt.Print("sun = ")
for sun != nil {
fmt.Printf("[%d]", sun.Val)
sun = sun.Next
}
fmt.Println("")
}
输出结果:
l1 = [9][0][1][2][3][4][5][6][7][8][9]
l2 = [4][0][1][2][3][4][5][6][7][8][9]
sun = [3][1][2][4][6][8][0][3][5][7][9][1]