package main
/**
* Project 2: programming in Go lang
* Using Go Lang, write a program that:
* - fills an array with random integers in the range 10 to 99.
* - builds a Singly LinkedList by inserting the integers in the array into the data structure.
* - finds the length of a given LinkedList.
* - finds the minimum value in a given LinkedList.
* - reverses the LinkedList
* - remove by value from the LinkedList
*
* author: Nicholas Adamou
* date: 10/7/19
* Class: CSC-315
*/
import (
"fmt"
"math/rand"
)
type Node struct {
value int
next *Node
}
func insert(LinkedList *Node, value int) *Node {
if LinkedList == nil {
return LinkedList
}
for node := LinkedList; node != nil; node = node.next {
if node.next == nil {
node.next = &Node{value, nil}
return LinkedList
}
}
return LinkedList
}
func findMinimum(LinkedList *Node) (minimum int) {
for node := LinkedList; node != nil; node = node.next {
if node.next != nil {
if node.value < node.next.value {
minimum = node.value
}
}
}
return
}
func length(LinkedList *Node) (count int) {
for node := LinkedList; node != nil; node = node.next {
count += 1
}
return
}
func reverse(LinkedList *Node) *Node {
if LinkedList == nil {
return LinkedList
}
node := LinkedList
if node.next == nil {
return node
} else {
newHead := reverse(node.next)
node.next.next = node
node.next = nil
return newHead
}
}
func removeByValue(LinkedList *Node, value int) *Node {
if LinkedList == nil {
return LinkedList
}
node := LinkedList
if node.value == value {
node = node.next
return node
}
for node.next != nil {
if node.next.value == value {
node.next = node.next.next
return LinkedList
}
node = node.next
}
return LinkedList
}
func print(LinkedList *Node) {
for node := LinkedList; node != nil; node = node.next {
if node.next == nil {
fmt.Printf(" %d", node.value)
} else {
fmt.Printf(" %d ->", node.value)
}
}
fmt.Println()
}
func random(max int, min int) int {
return rand.Int() % (max - min + 1) + min
}
func main() {
const MIN = 10
const MAX = 99
const SIZE = 10
var LinkedList *Node = &Node{random(MAX, MIN), nil}
for i := 1; i < SIZE; i++ {
insert(LinkedList, random(MAX, MIN))
}
print(LinkedList)
fmt.Printf("\nLength of LinkedList: %d\n", length(LinkedList))
fmt.Printf("Minimum value: %d\n", findMinimum(LinkedList))
fmt.Println()
reversed := reverse(LinkedList)
print(reversed)
fmt.Printf("\nLength of LinkedList: %d\n", length(reversed))
fmt.Printf("Minimum value: %d\n", findMinimum(reversed))
node := removeByValue(reversed, findMinimum(reversed))
fmt.Printf("\nRemoved %d\n\n", node.value)
print(reversed)
fmt.Printf("\nLength of LinkedList: %d\n", length(reversed))
}
Comments
0 B
|0 👍
/0 👎
0 B
|👍
/👎