86 lines
1.4 KiB
Go
86 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"strconv"
|
|
)
|
|
|
|
type ListNode struct {
|
|
Val int
|
|
Next *ListNode
|
|
}
|
|
|
|
func (l *ListNode) Add(val int) {
|
|
newNode := &ListNode{Val: val}
|
|
current := l
|
|
for current.Next != nil {
|
|
current = current.Next
|
|
}
|
|
current.Next = newNode
|
|
}
|
|
func (l *ListNode) Get(index int) (int, error) {
|
|
current := l
|
|
for i := 0; i < index; i++ {
|
|
if current.Next != nil {
|
|
current = current.Next
|
|
} else {
|
|
return 0, errors.New("there is nothing to index at")
|
|
}
|
|
|
|
}
|
|
return current.Val, nil
|
|
}
|
|
func (l *ListNode) GetNr() int {
|
|
res := 0
|
|
multiplier := 1
|
|
current := l
|
|
for current.Next != nil {
|
|
res = res + (current.Val * multiplier)
|
|
multiplier = multiplier * 10
|
|
current = current.Next
|
|
}
|
|
res = res + (current.Val * multiplier)
|
|
return res
|
|
}
|
|
func (l *ListNode) Length() int {
|
|
count := 0
|
|
if l.Val != 0 {
|
|
count++
|
|
}
|
|
current := l
|
|
for current.Next != nil {
|
|
current = current.Next
|
|
count++
|
|
}
|
|
return count
|
|
}
|
|
|
|
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
|
|
s2 := strconv.Itoa(l1.GetNr() + l2.GetNr())
|
|
a := []rune(s2)
|
|
head := &ListNode{Val: 0}
|
|
res := head
|
|
|
|
for _, r := range a {
|
|
nr, err := strconv.Atoi(string(r))
|
|
if err != nil {
|
|
panic("lol")
|
|
}
|
|
res.Next = &ListNode{Val: nr}
|
|
res = res.Next
|
|
|
|
}
|
|
return head.Next
|
|
}
|
|
|
|
func main() {
|
|
l1 := ListNode{Val: 2}
|
|
l1.Add(4)
|
|
l1.Add(3)
|
|
l2 := ListNode{Val: 5}
|
|
l2.Add(6)
|
|
l2.Add(4)
|
|
l3 := addTwoNumbers(&l1, &l2)
|
|
fmt.Println(l3.GetNr())
|
|
}
|