Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "strconv"
- "strings"
- )
- func getSumCarry(a int, b int, c int) (int, int) {
- if a+b+c < 10 {
- return a + b + c, 0
- }
- return (a + b + c) - 10, 1
- }
- type List struct {
- val int
- len int
- next *List
- }
- func (l *List) num2list(num int) *List {
- sNum := strings.Split(fmt.Sprintf("%d", num), "")
- val, _ := strconv.Atoi(sNum[len(sNum)-1])
- l = &List{val: val, len: 0, next: nil}
- for id := len(sNum) - 2; id >= 0; id -- {
- val, _ = strconv.Atoi(sNum[id])
- for lst := l; lst != nil; lst = lst.next {
- if lst.next == nil {
- l.len ++
- lst.next = &List{val: val, len: l.len, next: nil}
- break
- }
- }
- }
- return l
- }
- func allign(a *List, b *List) {
- longest := 0
- adjust := a
- if a.len > b.len {
- longest = a.len
- adjust = b
- } else if b.len > a.len {
- longest = b.len
- } else {
- return
- }
- for i := longest; i >= 0; i -- {
- for lst := adjust; lst != nil; lst = lst.next {
- if lst.next == nil {
- adjust.len ++
- lst.next = &List{val: 0, len: adjust.len, next: nil}
- break
- }
- }
- }
- return
- }
- func sumList(a *List, b *List) *List {
- carry := 0
- aNext := a
- bNext := b
- for i := a.len; i >= 0; i -- {
- bNext.val, carry = getSumCarry(aNext.val, bNext.val, carry)
- bNext = bNext.next
- aNext = aNext.next
- }
- return b
- }
- func main() {
- LList := List{}
- first := LList.num2list(342)
- secnd := LList.num2list(465)
- result := sumList(first, secnd)
- fmt.Println(result.val, result.next.val, result.next.next.val)
- f := LList.num2list(199)
- s := LList.num2list(1)
- allign(f, s)
- result = sumList(f, s)
- fmt.Println(result.val, result.next.val, result.next.next.val)
- }
Add Comment
Please, Sign In to add comment