package main
import "fmt"
type listNode struct {
value interface{}
next *listNode
}
type list struct {
length int
headPointer *listNode
}
//新建List
func initList() *list {
newNode := new(listNode)
newList := new(list)
newList.headPointer = newNode
return newList
}
//判断链表是否为空
func (l *list) isNull() bool {
if l.length == 0 {
return true
} else {
return false
}
}
//在指定位置插入元素
func (l *list) insertIndexValue(index int, value interface{}) {
if index <= 0 || index > l.length {
fmt.Println("index无效")
} else {
pre := l.headPointer
newNode := &listNode{value: value}
//if index == 1 {
// newNode.next = pre
// l.headPointer = newNode
//} else {
// for i := 1; i < index-1; i++ {
// pre = pre.next
// }
// newNode.next = pre.next
// pre.next = newNode
//}
for i := 1; i < index; i++ {
pre = pre.next
}
newNode.next = pre.next
pre.next = newNode
l.length++
}
}
//在头部插入元素
func (l *list) insertHeadValue(value interface{}) {
newNode := &listNode{value: value}
//if l.isNull() {
// l.headPointer = newNode
// l.length++
// return
//}
//pre := l.headPointer
//newNode.next = pre
//l.headPointer = newNode
//l.length++
pre := l.headPointer
newNode.next = pre.next
pre.next = newNode
l.length++
return
}
//在尾部插入元素
func (l *list) insertTailValue(value interface{}) {
pre := l.headPointer
newNode := &listNode{value: value}
for pre.next != nil {
pre = pre.next
}
pre.next = newNode
l.length++
}
//删除指定值的元素
func (l *list) deleteValueElement(value interface{}) {
pre := l.headPointer
var temp *listNode
for pre.next != nil {
temp = pre
pre = pre.next
if pre.value == value {
temp.next = pre.next
l.length--
}
}
}
//删除指定位置元素
func (l *list) deleteIndexElement(index int) {
if index <= 0 || index > l.length {
fmt.Println("index无效")
return
} else {
pre := l.headPointer
for i := 1; i < index; i++ {
pre = pre.next
}
pre.next = pre.next.next
l.length--
}
}
//查询指定位置元素
func (l *list) findIndexElement(index int) interface{} {
pre := l.headPointer
if index <= 0 || index > l.length {
fmt.Println("index无效")
return nil
} else {
for i := 1; i <= index; i++ {
pre = pre.next
}
return pre.value
}
}
//查询是否包含指定值
func (l *list) findValue(value interface{}) bool {
pre := l.headPointer
for pre.next != nil {
pre = pre.next
if pre.value == value {
return true
}
}
return false
}
//遍历单链表
func (l *list) traverseList() {
first := l.headPointer.next
for i := 1; i <= l.length; i++ {
fmt.Print(first.value, "->")
first = first.next
}
fmt.Println()
}
func main() {
l := initList()
values := []int{1, 2, 3, 2, 4, 5}
for _, item := range values {
l.insertTailValue(item)
}
l.insertIndexValue(4, 100)
fmt.Println(l.length)
fmt.Println(l.headPointer)
l.traverseList()
l.deleteValueElement(2)
l.traverseList()
l.deleteIndexElement(3)
l.traverseList()
fmt.Println(l.findIndexElement(3))
fmt.Println(l.findValue(5))
}
运行结果
7
&{<nil> 0xc000114078}
1->2->3->100->2->4->5->
1->3->100->4->5->
1->3->4->5->
4
true