两数相加(go)
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
num1 := make([]int, 0)
for l1 != nil {
num1 = append(num1, l1.Val)
l1 = l1.Next
}
num2 := make([]int, 0)
for l2 != nil {
num2 = append(num2, l2.Val)
l2 = l2.Next
}
var a int = 1
var carry int = 0
num5 := make([]int, 0)
if len(num1) > len(num2) || len(num1) == len(num2) {
num5 = dataNumber(num1, num2, a, carry, num5)
}
if len(num1) < len(num2) {
num5 = dataNumber(num2, num1, a, carry, num5)
}
listNode := new(ListNode)
for k := len(num5) - 1; k >= 0; k-- {
if k == len(num5)-1 {
listNode.Val = num5[k]
listNode.Next = nil
} else {
listNode = insert(listNode, num5[k])
}
}
return listNode
}
func dataNumber(num3 []int, num4 []int, a int, carry int, num5 []int) []int {
for i := 0; i <= len(num3)-1; i++ {
var b int = 0
if a <= len(num4) {
for j := i; j <= len(num4)-1; j++ {
b = num4[j]
break
}
}
twoNumbers := num3[i] + b
if carry == 1 {
twoNumbers += 1
carry = 0
}
if twoNumbers >= 10 {
twoNumbers -= 10
carry = 1
}
if i == len(num3)-1 && carry == 1 {
num5 = append(num5, twoNumbers, 1)
} else {
num5 = append(num5, twoNumbers)
}
a = a + 1
}
return num5
}
func insert(head *ListNode, val int) *ListNode {
newList := new(ListNode)
newList.Val = val
newList.Next = head
return newList
}
type ListNode struct {
Val int
Next *ListNode
}