LeetCode_AddTwoNumbers/main.go

87 lines
1.4 KiB
Go
Raw Normal View History

2024-03-26 09:16:49 +01:00
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
2024-03-26 09:45:11 +01:00
multiplier := 1
2024-03-26 09:16:49 +01:00
current := l
for current.Next != nil {
2024-03-26 09:45:11 +01:00
res = res + (current.Val * multiplier)
multiplier = multiplier * 10
2024-03-26 09:16:49 +01:00
current = current.Next
}
2024-03-26 09:45:11 +01:00
res = res + (current.Val * multiplier)
2024-03-26 09:16:49 +01:00
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())
}