11package main
22
3- import (
4- "reflect"
5- "testing"
6- )
3+ import "fmt"
74
85type Node struct {
96 Value int
@@ -17,159 +14,152 @@ type SinglyLinkedList struct {
1714func (list * SinglyLinkedList ) AddLeft (value int ) {
1815 node := Node {Value : value }
1916
20- if list .Head == nil {
21- list .Head = & node
22- return
23- }
17+ if list .Head == nil {
18+ list .Head = & node
19+ return
20+ }
2421
25- node .Next = list .Head
26- list .Head = & node
22+ node .Next = list .Head
23+ list .Head = & node
2724}
2825
2926func (list * SinglyLinkedList ) AddRight (value int ) {
30- node := Node {Value : value }
27+ node := Node {Value : value }
3128
32- if list .Head == nil {
33- list .Head = & node
34- return
35- }
29+ if list .Head == nil {
30+ list .Head = & node
31+ return
32+ }
3633
37- pointer := list .Head
34+ pointer := list .Head
3835
39- for pointer .Next != nil {
40- pointer = pointer .Next
41- }
36+ for pointer .Next != nil {
37+ pointer = pointer .Next
38+ }
4239
43- pointer .Next = & node
40+ pointer .Next = & node
4441}
4542
4643func (list * SinglyLinkedList ) RemoveLeft () {
47- if list .Head == nil {
48- return
49- }
44+ if list .Head == nil {
45+ return
46+ }
5047
51- list .Head = list .Head .Next
48+ list .Head = list .Head .Next
5249}
5350
5451func (list * SinglyLinkedList ) RemoveRight () {
5552 if list .Head == nil {
56- return
57- }
53+ return
54+ }
5855
59- if list .Head .Next == nil {
60- list .Head = nil
61- return
62- }
56+ if list .Head .Next == nil {
57+ list .Head = nil
58+ return
59+ }
6360
64- pointer := list .Head
61+ pointer := list .Head
6562
66- for pointer .Next .Next != nil {
67- pointer = pointer .Next
68- }
63+ for pointer .Next .Next != nil {
64+ pointer = pointer .Next
65+ }
6966
70- pointer .Next = nil
67+ pointer .Next = nil
7168}
7269
7370func (list * SinglyLinkedList ) FindAt (idx int ) * Node {
74- pointer := list .Head
71+ pointer := list .Head
7572
76- for i := 0 ; i < idx ; i ++ {
77- pointer = pointer .Next
78- if pointer == nil {
79- return nil
80- }
81- }
73+ for i := 0 ; i < idx ; i ++ {
74+ pointer = pointer .Next
75+ if pointer == nil {
76+ return nil
77+ }
78+ }
8279
83- return pointer
80+ return pointer
8481}
8582
8683func (list * SinglyLinkedList ) AddAt (idx , value int ) {
87- if idx == 0 {
88- list .AddLeft (value )
89- return
90- }
84+ if idx == 0 {
85+ list .AddLeft (value )
86+ return
87+ }
9188
92- prevNode := list .FindAt (idx - 1 )
89+ prevNode := list .FindAt (idx - 1 )
9390
94- if prevNode == nil {
95- return
96- }
91+ if prevNode == nil {
92+ return
93+ }
9794
98- node := Node {Value : value }
95+ node := Node {Value : value }
9996
100- node .Next = prevNode .Next
101- prevNode .Next = & node
97+ node .Next = prevNode .Next
98+ prevNode .Next = & node
10299}
103100
104101func (list * SinglyLinkedList ) RemoveAt (idx int ) {
105- if idx == 0 {
106- list .RemoveLeft ()
107- return
108- }
102+ if idx == 0 {
103+ list .RemoveLeft ()
104+ return
105+ }
109106
110- prevNode := list .FindAt (idx - 1 )
107+ prevNode := list .FindAt (idx - 1 )
111108
112- if prevNode == nil {
113- return
114- }
109+ if prevNode == nil {
110+ return
111+ }
115112
116- prevNode .Next = prevNode .Next .Next
113+ prevNode .Next = prevNode .Next .Next
117114}
118115
119116func (list * SinglyLinkedList ) ToSlice () []int {
120- var slice []int
117+ var slice []int
121118
122- for pointer := list .Head ; pointer != nil ; pointer = pointer .Next {
123- slice = append (slice , pointer .Value )
124- }
119+ for pointer := list .Head ; pointer != nil ; pointer = pointer .Next {
120+ slice = append (slice , pointer .Value )
121+ }
125122
126- return slice
123+ return slice
127124}
128125
129- func TestSinglyLinkedList ( t * testing. T ) {
126+ func main ( ) {
130127 list := SinglyLinkedList {}
131128
132- // test AddLeft
129+ fmt . Println ( " AddLeft(1, 2)" )
133130 list .AddLeft (1 )
134131 list .AddLeft (2 )
135- if ! reflect .DeepEqual (list .ToSlice (), []int {2 , 1 }) {
136- t .Errorf ("AddLeft failed, expected %v, got %v" , []int {2 , 1 }, list .ToSlice ())
137- }
138132
139- // test AddRight
133+ fmt .Println ("list.toSlice(): " , list .ToSlice ())
134+
135+ fmt .Println ("AddRight(3, 4)" )
140136 list .AddRight (3 )
141137 list .AddRight (4 )
142- if ! reflect .DeepEqual (list .ToSlice (), []int {2 , 1 , 3 , 4 }) {
143- t .Errorf ("AddRight failed, expected %v, got %v" , []int {2 , 1 , 3 , 4 }, list .ToSlice ())
144- }
145138
146- //// test RemoveLeft
139+ fmt .Println ("list.toSlice(): " , list .ToSlice ())
140+
141+ fmt .Println ("RemoveLeft()" )
147142 list .RemoveLeft ()
148- if ! reflect .DeepEqual (list .ToSlice (), []int {1 , 3 , 4 }) {
149- t .Errorf ("RemoveLeft failed, expected %v, got %v" , []int {1 , 3 , 4 }, list .ToSlice ())
150- }
151143
152- // test RemoveRight
144+ fmt .Println ("list.toSlice(): " , list .ToSlice ())
145+
146+ fmt .Println ("RemoveRight()" )
153147 list .RemoveRight ()
154- if ! reflect .DeepEqual (list .ToSlice (), []int {1 , 3 }) {
155- t .Errorf ("RemoveRight failed, expected %v, got %v" , []int {1 , 3 }, list .ToSlice ())
156- }
157148
158- // test AddAt
149+ fmt .Println ("list.toSlice(): " , list .ToSlice ())
150+
151+ fmt .Println ("AddAt(1, 5)" )
159152 list .AddAt (1 , 5 )
160- if ! reflect .DeepEqual (list .ToSlice (), []int {1 , 5 , 3 }) {
161- t .Errorf ("AddAt failed, expected %v, got %v" , []int {1 , 5 , 3 }, list .ToSlice ())
162- }
163153
164- // test RemoveAt
154+ fmt .Println ("list.toSlice(): " , list .ToSlice ())
155+
156+ fmt .Println ("RemoveAt(2)" )
165157 list .RemoveAt (2 )
166- if ! reflect .DeepEqual (list .ToSlice (), []int {1 , 5 }) {
167- t .Errorf ("RemoveAt failed, expected %v, got %v" , []int {1 , 5 }, list .ToSlice ())
168- }
169158
170- // test FindAt
159+ fmt .Println ("list.toSlice(): " , list .ToSlice ())
160+
161+ fmt .Println ("FindAt(0)" )
171162 node := list .FindAt (0 )
172- if node == nil || node .Value != 1 {
173- t .Errorf ("FindAt failed, expected %v, got %v" , 1 , node .Value )
174- }
163+ fmt .Println ("node.Value: " , node .Value )
164+
175165}
0 commit comments