-
Notifications
You must be signed in to change notification settings - Fork 35
Expand file tree
/
Copy pathlinked-queue.go
More file actions
49 lines (43 loc) · 819 Bytes
/
linked-queue.go
File metadata and controls
49 lines (43 loc) · 819 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package queue
type node struct {
value interface{}
prev *node
next *node
}
type LinkedQueue struct {
head *node
tail *node
size int
}
func (queue *LinkedQueue) Size() int {
return queue.size
}
func (queue *LinkedQueue) Peek() interface{} {
if queue.head == nil {
panic("Empty queue.")
}
return queue.head.value
}
func (queue *LinkedQueue) Add(value interface{}) {
new_node := &node{value, queue.tail, nil}
if queue.tail == nil {
queue.head = new_node
queue.tail = new_node
} else {
queue.tail.next = new_node
queue.tail = new_node
}
queue.size++
new_node = nil
}
func (queue *LinkedQueue) Remove() {
if queue.head == nil {
panic("Empty queue.")
}
first_node := queue.head
queue.head = first_node.next
first_node.next = nil
first_node.value = nil
queue.size--
first_node = nil
}