Sha256: 1f384e60a03fad4f464065d6c12744556706a20611a1ec2d2d4e4502b1ca48bc

Contents?: true

Size: 1.21 KB

Versions: 92

Compression:

Stored size: 1.21 KB

Contents

package linkedlist

import "errors"

type element struct {
	data int
	next *element
}

type List struct {
	head *element
	size int
}

func New(array []int) *List {
	var res List
	for _, elem := range array {
		res.Push(elem)
	}
	return &res
}

func (list *List) Size() int {
	return list.size
}

func (list *List) Push(elem int) {
	newNode := element{elem, nil}
	if list.head == nil {
		list.head = &newNode
	} else {
		node := list.head
		for node.next != nil {
			node = node.next
		}
		node.next = &newNode
	}
	list.size++
}

func (list *List) Pop() (int, error) {
	var elem int
	if list.size == 0 {
		return 0, errors.New("Cannot call pop on empty list")
	} else if list.size == 1 {
		elem = list.head.data
		list.head = nil
	} else {
		node := list.head
		for node.next.next != nil {
			node = node.next
		}
		elem = node.next.data
		node.next = nil
	}
	list.size--
	return elem, nil
}

func (list *List) Array() []int {
	res := []int{}
	for node := list.head; node != nil; node = node.next {
		res = append(res, node.data)
	}
	return res
}

func (list *List) Reverse() *List {
	array, size := list.Array(), list.size
	for i := 0; i < size/2; i++ {
		array[i], array[size-1-i] = array[size-1-i], array[i]
	}
	return New(array)
}

Version data entries

92 entries across 92 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.179 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.178 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.177 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.176 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.175 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.174 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.173 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.172 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.171 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.170 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.169 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.167 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.166 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.165 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.164 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.163 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.162 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.161 tracks/go/exercises/simple-linked-list/example.go
trackler-2.2.1.160 tracks/go/exercises/simple-linked-list/example.go