goscript-engine 0.1.0

goscript engine
Documentation
// for testing GC; taken from internet
package main

import "fmt"

type Node struct {
	prev *Node
	next *Node
	key  interface{}
}

type List struct {
	head *Node
	tail *Node
	t1 *Node
	t2 *Node
}

var glist = List{}

func (L *List) Insert(key interface{}) {
	list := &Node{
		next: L.head,
		key:  key,
	}
	if L.head != nil {
		L.head.prev = list
	}
	L.head = list

	l := L.head
	for l.next != nil {
		l = l.next
	}
	L.tail = l
}

func (l *List) Display() {
	list := l.head
	for list != nil {
		fmt.Println("%+v ->", list.key)
		list = list.next
	}
	//fmt.Println()
}

func Display(list *Node) {
	for list != nil {
		fmt.Println("%v ->", list.key)
		list = list.next
	}
	//fmt.Println()
}

func ShowBackwards(list *Node) {
	for list != nil {
		fmt.Println("%v <-", list.key)
		list = list.prev
	}
	//fmt.Println()
}

func (l *List) Reverse() {
	curr := l.head
	var prev *Node
	l.tail = l.head

	for curr != nil {
		next := curr.next
		curr.next = prev
		prev = curr
		curr = next
	}
	l.head = prev
	Display(l.head)
}

func main() {
	
	link := List{}
	link.Insert(1)
	link.Insert(3)
	link.Insert(5)
	link.Insert(7)
	link.Insert(9)
	
	fmt.Println("\n==============================\n")
	fmt.Println("Head: %v\n", link.head.key)
	fmt.Println("Tail: %v\n", link.tail.key)
	//fmt.Println("ttt: %v\n", link.ttt.key)
	link.Display()
	fmt.Println("\n==============================\n")
	fmt.Println("head: %v\n", link.head.key)
	fmt.Println("tail: %v\n", link.tail.key)
	link.Reverse()
	fmt.Println("\n==============================\n")


	// for testing GC
	link2 := List{}
	link2.Insert(10)
	link2.Insert(30)
	link2.Insert(50)
	link2.Insert(70)
	link2.Insert(90)
	link2.head.prev = link2.tail
	link2.tail.next = link2.head
	glist.Insert(2)
	glist.Insert(4)
	glist.Insert(6)
	glist.Insert(8)
	glist.Insert(10)
	glist.t1 = glist.head
	glist.t2 = glist.head
	
}