package main
import (
"fmt"
)
func main() {
l1 := &ListNode{
Val: 1,
Next: nil,
}
l2 := &ListNode{
Val: 9,
Next: &ListNode{
Val: 9,
Next: nil,
},
}
fmt.Println(l1, l2)
fmt.Println(addTwoNumbers(l1, l2))
}
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
carry := 0
res := new(ListNode)
cur := res
for l1 != nil || l2 != nil {
v1 := 0
if l1 != nil {
v1 = l1.Val
l1 = l1.Next
}
v2 := 0
if l2 != nil {
v2 = l2.Val
l2 = l2.Next
}
sum := v1 + v2 + carry
node := &ListNode{Val: sum % 10}
cur.Next = node
cur = node
carry = sum / 10
}
if carry > 0 {
node := &ListNode{Val: carry}
cur.Next = node
}
return res.Next
}
type ListNode struct {
Val int
Next *ListNode
}
func (l ListNode) String() string {
cur := &l
res := ""
for cur != nil {
res += fmt.Sprintf("%d-", cur.Val)
cur = cur.Next
}
return res
}