package main
import "fmt"
type ListNode struct {
Val int
Next *ListNode
}
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
return ExportResult(l1,l2,0)
}
func ExportResult(l1 *ListNode, l2 *ListNode,k int) *ListNode {
res := &ListNode{}
sum := l1.Val + l2.Val + k
if sum > 9 {
k = 1
res.Val = sum - 10
}else {
k = 0
res.Val = sum
}
if l1.Next == nil && l2.Next == nil {
if k == 1 {
resNext := &ListNode{
Val: 1,
Next: nil,
}
res.Next = resNext
}
}else if l1.Next == nil {
if k == 1 {
res.Next = oneAdd(l2.Next)
}else {
res.Next = l2.Next
}
}else if l2.Next == nil {
if k == 1 {
res.Next = oneAdd(l1.Next)
}else {
res.Next = l1.Next
}
}else {
res.Next = ExportResult(l1.Next,l2.Next,k)
}
return res
}
func oneAdd(l *ListNode) *ListNode {
res := &ListNode{}
b := 1 + l.Val
if b > 9{
res.Val = b - 10
if l.Next == nil {
resNext := &ListNode{
Val: 1,
Next: nil,
}
res.Next = resNext
}else {
res.Next = oneAdd(l.Next)
}
}else {
res.Val = b
res.Next = l.Next
}
return res
}
func main() {
list1Node4 := &ListNode{
Val:9,
Next:nil,
}
list1Node3 := &ListNode{
Val:6,
Next:list1Node4,
}
list1Node2 := &ListNode{
Val:4,
Next:list1Node3,
}
list1Node1 := &ListNode{
Val:2,
Next:list1Node2,
}
list2Node3 := &ListNode{
Val:4,
Next:nil,
}
list2Node2 := &ListNode{
Val:6,
Next:list2Node3,
}
list2Node1 := &ListNode{
Val:5,
Next:list2Node2,
}
res := addTwoNumbers(list1Node1, list2Node1)
for{
fmt.Println(res.Val)
if res.Next == nil{
break
}
res = res.Next
}
}