Skip to content

Instantly share code, notes, and snippets.

@rogerwelin
Created May 15, 2018 19:39
Show Gist options
  • Save rogerwelin/864ae32e837b9b568f8d7c4f5bb19f0f to your computer and use it in GitHub Desktop.
Save rogerwelin/864ae32e837b9b568f8d7c4f5bb19f0f to your computer and use it in GitHub Desktop.
linked list golang
package main
import "fmt"
type Node struct {
Value int
Next *Node
}
var root = new(Node)
func addNode(t *Node, v int) int {
if root == nil {
t = &Node{v, nil}
root = t
return 0
}
if v == t.Value {
fmt.Println("Node already exists:", v)
return -1
}
if t.Next == nil {
t.Next = &Node{v, nil}
return -2
}
return addNode(t.Next, v)
}
func traverse(t *Node) {
if t == nil {
fmt.Println("-> Empty List")
return
}
for t != nil {
fmt.Printf("%d -> ", t.Value)
t = t.Next
}
fmt.Println()
}
func lookupNode(t *Node, v int) bool {
if root == nil {
t = &Node{v, nil}
root = t
return false
}
if v == t.Value {
return true
}
if t.Next == nil {
return false
}
return lookupNode(t.Next, v)
}
func size(t *Node) int {
if t == nil {
fmt.Println("-> Empty list!")
return 0
}
i := 0
for t != nil {
i++
t = t.Next
}
return i
}
func main() {
fmt.Println(root)
root = nil
traverse(root)
addNode(root, 1)
addNode(root, -1)
traverse(root)
addNode(root, 10)
addNode(root, 5)
addNode(root, 45)
addNode(root, 5)
addNode(root, 5)
traverse(root)
addNode(root, 100)
traverse(root)
if lookupNode(root, 100) {
fmt.Println("Node exists!")
} else {
fmt.Println("Node does not exist!")
}
if lookupNode(root, -100) {
fmt.Println("Node exists!")
} else {
fmt.Println("Node does not exist!")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment