

package main
import "fmt"
type ListNode struct {
Val int
Next *ListNode
}
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
l1 = revertNode(l1)
l2 = revertNode(l2)
dummyHead := &ListNode{Val: -1,}
var carry int
for l1 != nil || l2 != nil {
var a int
if l1 != nil {
a = l1.Val
l1 = l1.Next
}
var b int
if l2 != nil {
b = l2.Val
l2 = l2.Next
}
sum := a + b + carry
carry = sum / 10
node := &ListNode{
Val: sum % 10,
}
head := dummyHead.Next
node.Next = head
dummyHead.Next = node
}
if carry > 0 {
node := &ListNode{
Val: carry,
}
head := dummyHead.Next
node.Next = head
dummyHead.Next = node
}
return dummyHead.Next
}
func revertNode(l *ListNode) *ListNode {
var pre *ListNode
curr := l
for curr != nil {
next := curr.Next
curr.Next = pre
pre = curr
curr = next
}
return pre
}
func main() {
a1 := &ListNode{
Val: 7,
}
b1 := &ListNode{
Val: 2,
}
a1.Next = b1
c1 := &ListNode{
Val: 4,
}
b1.Next = c1
d1 := &ListNode{
Val: 3,
}
c1.Next = d1
a2 := &ListNode{
Val: 5,
}
b2 := &ListNode{
Val: 6,
}
a2.Next = b2
c2 := &ListNode{
Val: 4,
}
b2.Next = c2
r := addTwoNumbers(a1,a2)
for r != nil{
fmt.Println(r.Val)
r = r.Next
}
}