package main
import (
"fmt"
)
type ListNode struct {
Val int
Next *ListNode
}
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
// 链表两数相加
var head *ListNode = nil
var p *ListNode = nil
var pre *ListNode = nil
var high int = 0 // 进位值
for {
if l1 == nil && l2 == nil && high == 0 {
break
}
p = new(ListNode)
p.Val = 0
p.Next = nil
if head == nil {
head = p
} else {
pre.Next = p
}
if l1 != nil && l2 != nil {
p.Val = (high + l1.Val + l2.Val) % 10
high = (high + l1.Val + l2.Val) / 10
l1 = l1.Next
l2 = l2.Next
} else if l1 != nil {
p.Val = (high + l1.Val) % 10
high = (high + l1.Val) / 10
l1 = l1.Next
} else if l2 != nil {
p.Val = (high + l2.Val) % 10
high = (high + l2.Val) / 10
l2 = l2.Next
} else {
p.Val = high
high = 0
}
pre = p
p = p.Next
}
return head
}
func main() {
fmt.Println("Start")
var l1 *ListNode = nil
var l2 *ListNode = nil
var pre *ListNode = nil
a := []int{2, 4, 3}
b := []int{5, 6, 4}
for _, num := range a {
p := new(ListNode)
if l1 == nil {
l1 = p
} else {
pre.Next = p
}
p.Val = num
pre = p
p = p.Next
}
for _, num := range b {
p := new(ListNode)
if l2 == nil {
l2 = p
} else {
pre.Next = p
}
p.Val = num
pre = p
p = p.Next
}
l3 := addTwoNumbers(l1, l2)
for {
if l3 == nil {
break
}
fmt.Println(l3.Val)
l3 = l3.Next
}
}