Skip to content

Add One in Lisked List Digit

Input: |1| -> |3| -> |9| -> |9|
Digit is: 1399
1399 + 1 = 1400
Output: |1| -> |4| -> |0| -> |0|

Input: |9| -> |9| -> |9| -> |9|
Output: |1| -> |0| -> |0| -> |0| -> |0|

Implementation

package main

import "fmt"

func main() {
    head := initialize(19999)
    head = addOne(head)
    printResult(head)
}

func initialize(n int) (head *Node) {

    var arr []int
    for n > 0 {
        data := n % 10
        arr = append(arr, data)
        n = n / 10
    }
    var curr *Node
    for i := len(arr) - 1; i >= 0; i-- {
        if i == len(arr)-1 {
            curr = &Node{data: arr[i]}
            head = curr
        } else {
            curr.next = &Node{data: arr[i]}
            curr = curr.next
        }
    }

    return head
}

func printResult(head *Node) {
    for head != nil {
        fmt.Print(head.data)
        head = head.next
    }
    fmt.Println()

}

type Node struct {
    data int
    next *Node
}

func addOne(head *Node) *Node {
    var stack []*Node
    curr := head
    for curr != nil {
        stack = append(stack, curr)
        curr = curr.next
    }
    carry := 1
    for i := len(stack) - 1; i >= 0; i-- {
        ele := stack[i]
        add := ele.data + carry
        ele.data = add % 10
        carry = add / 10
    }
    if carry > 0 {
        newHead := &Node{data: carry}
        newHead.next = head
        return newHead
    }
    return head
}