Skip to content

Instantly share code, notes, and snippets.

@gsrai
Created May 30, 2022 20:47
Show Gist options
  • Save gsrai/2376c1448409b38a11da3670e99e8225 to your computer and use it in GitHub Desktop.
Save gsrai/2376c1448409b38a11da3670e99e8225 to your computer and use it in GitHub Desktop.

Revisions

  1. gsrai created this gist May 30, 2022.
    54 changes: 54 additions & 0 deletions main.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,54 @@
    package main

    import "fmt"

    type Node[T any] struct {
    Next *Node[T]
    Value T
    }

    type LinkedList[T any] struct {
    Head *Node[T]
    }

    func NewLinkedList[T any]() *LinkedList[T] {
    return &LinkedList[T]{}
    }

    func (ll *LinkedList[T]) addNode(value T) {
    n := Node[T]{Next: ll.Head, Value: value}
    ll.Head = &n
    }

    func (ll *LinkedList[T]) String() string {
    s := " <- head"
    for element := ll.Head; element != nil; element = element.Next {
    s = fmt.Sprintf("%v %s", element.Value, s)
    }
    return s
    }

    func (ll *LinkedList[T]) Reverse() {
    cn := ll.Head
    var next, prev *Node[T]

    for cn != nil {
    next = cn.Next
    cn.Next = prev
    prev = cn
    cn = next
    }
    ll.Head = prev
    }

    func main() {
    ll := NewLinkedList[int]()
    ll.addNode(1)
    ll.addNode(2)
    ll.addNode(3)
    ll.addNode(4)
    ll.addNode(5)
    fmt.Println(ll)
    ll.Reverse()
    fmt.Println(ll)
    }