package data_structure
import ( "fmt" "testing" )
type node struct { data int // 数据域 next *node // 指针域 }
type SingleList struct { head *node // 头指针 length int // 单链表长度 }
func TestSingleList(t *testing.T) { s := &SingleList{} s.Insert(2) s.Insert(3) s.Insert(4) fmt.Println(s.FindAll()) fmt.Println(s.Delete(4)) fmt.Println(s.FindAll()) fmt.Println(s.Contains(12))
}
// Delete:删除某一个元素 func (s *SingleList) Delete(data int) (isSuccess bool) { if s.IsEmpty() { // 链表为空 return }
n := s.head.next
pre := s.head
for n != nil {
if n.data == data { // 找到这个元素了
isSuccess = true
pre.next = n.next
break
} else {
pre = n // 保存父节点
n = n.next
}
}
s.length--
if s.IsEmpty() {
s = nil
}
return
}
// Contains: 是否包含某个元素 func (s *SingleList) Contains(data int) (isExist bool) { if s.IsEmpty() { return }
n := s.head.next
for n != nil {
if n.data == data {
isExist = true
return
}
n = n.next
}
return
}
// FindAll:获取全部元素 func (s *SingleList) FindAll() (val []int) { if s.IsEmpty() { return } n := s.head.next for n != nil { // val = append(val, n.data) n = n.next } //val = append(val, n.data) return }
// Insert:向单链表添加某个元素 func (s *SingleList) Insert(data int) { s.length++ n := &node{ data: data, } // 表示是空链表 if s.head == nil { s.head = &node{} s.head.next = n //s.head = n return } // 遍历,然后追加节点 tmp := s.head.next for tmp.next != nil { tmp = tmp.next } tmp.next = n }
// IsEmpty:判断链表是否为空 func (s *SingleList) IsEmpty() bool { return s.head == nil }