差不多自己看懂了,可以自己写测试了。:)
LinkedList.go
package LinkedList //"fmt" type Node struct { data int next *Node } type LinkedList struct { head *Node } func (list *LinkedList) InsertFirst(i int) { data := &Node{data: i} if list.head != nil { data.next = list.head } list.head = data } func (list *LinkedList) InsertLast(i int) { data := &Node{data: i} if list.head == nil { list.head = data return } current := list.head for current.next != nil { current = current.next } current.next = data } func (list *LinkedList) RemoveByValue(i int) bool { if list.head == nil { return false } if list.head.data == i { list.head = list.head.next return true } current := list.head for current.next != nil { if current.next.data == i { current.next = current.next.next return true } current = current.next } return false } func (list *LinkedList) RemoveByIndex(i int) bool { if list.head == nil { return false } if i < 0 { return false } if i == 0 { list.head = list.head.next return true } current := list.head for u := 1; u < i; u++ { if current.next.next == nil { return false } current = current.next } current.next = current.next.next return true } func (list *LinkedList) SearchValue(i int) bool { if list.head == nil { return false } current := list.head for current != nil { if current.data == i { return true } current = current.next } return false } func (list *LinkedList) GetFirst() (int, bool) { if list.head == nil { return 0, false } return list.head.data, true } func (list *LinkedList) GetLast() (int, bool) { if list.head == nil { return 0, false } current := list.head for current.next != nil { current = current.next } return current.data, true } func (list *LinkedList) GetSize() int { count := 0 current := list.head for current != nil { count += 1 current = current.next } return count } func (list *LinkedList) getItems() []int { var items []int current := list.head for current != nil { items = append(items, current.data) current = current.next } return items }
LinkedList_test.go
package LinkedList import ( "fmt" "math/rand" "testing" "time" ) func TestLinkedList(t *testing.T) { random := rand.New(rand.NewSource(time.Now().UnixNano())) headNode := &Node{ data: random.Intn(100), next: nil, } list := &LinkedList{ head: headNode, } fmt.Println(list.getItems()) list.InsertFirst(random.Intn(100)) fmt.Println(list.getItems()) list.InsertLast(random.Intn(100)) fmt.Println(list.getItems()) randNumber := random.Intn(100) list.InsertFirst(randNumber) fmt.Println(list.getItems()) list.InsertLast(random.Intn(100)) fmt.Println(list.getItems()) list.InsertFirst(random.Intn(100)) fmt.Println(list.getItems()) if list.SearchValue(randNumber) == false { t.Fail() } list.RemoveByValue(randNumber) if list.SearchValue(randNumber) == true { t.Fail() } fmt.Println(list.getItems()) fmt.Println(list.RemoveByIndex(1)) fmt.Println(list.getItems()) fmt.Println(list.GetFirst()) fmt.Println(list.GetLast()) fmt.Println(list.GetSize()) }