-
Notifications
You must be signed in to change notification settings - Fork 0
/
singly-linked-list.go
86 lines (75 loc) · 1.68 KB
/
singly-linked-list.go
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package main
import (
"errors"
"fmt"
)
// Node is the type used by each node in the linked list
type Node struct {
Value int
Next *Node
}
// LinkedList struct is the actual linked list.
// It stores the head noed and methods to perform operations
// on the linked list denoted by that head node
type LinkedList struct {
head *Node
}
// Head returns the head node
func (list *LinkedList) Head() *Node {
return list.head
}
// Insert appends a new node with a given value
// at the end of the linked list
func (list *LinkedList) Insert(val int) {
if list.head == nil {
list.head = &Node{Value: val}
return
}
cur := list.head
for cur.Next != nil {
cur = cur.Next
}
cur.Next = &Node{Value: val}
}
// Search returns the node with a certain value if found, else nil.
func (list *LinkedList) Search(target int) (*Node, error) {
cur := list.head
for cur.Next != nil {
if cur.Value == target {
return cur, nil
}
cur = cur.Next
}
return nil, errors.New("value not found")
}
// PrintList traverses the list one by one
// and prints the value of each node
func (list *LinkedList) PrintList() {
cur := list.head
for cur != nil {
fmt.Printf("%v -> ", cur.Value)
cur = cur.Next
}
fmt.Println("nil")
}
func main() {
ll := LinkedList{}
ll.Insert(5)
ll.Insert(510)
ll.Insert(50)
ll.Insert(10)
ll.Insert(0)
ll.PrintList()
findTarget := 10
if node, err := ll.Search(findTarget); err != nil {
fmt.Printf("Error searching %v: %v\n", node.Value, err)
} else {
fmt.Printf("Found %v\n", node.Value)
}
findTarget = 20
if node, err := ll.Search(findTarget); err != nil {
fmt.Printf("Error searching %v: %v\n", findTarget, err)
} else {
fmt.Printf("Found %v\n", node.Value)
}
}