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)) }