代码片段如下:
/*
* .::::.
* .::::::::.
* :::::::::::
* ..:::::::::::'
* '::::::::::::'
* .::::::::::
* '::::::::::::::..
* ..::::::::::::. Utils:单链表
* ``:::::::::::::::: Author:崔金朋
* ::::``:::::::::' .:::.
* ::::' ':::::' .::::::::.
* .::::' :::: .:::::::'::::.
* .:::' ::::: .:::::::::' ':::::.
* .::' :::::.:::::::::' ':::::.
* .::' ::::::::::::::' ``::::.
* ...::: ::::::::::::' ``::.
* ```` ':. ':::::::::' ::::..
* '.:::::' ':'````..
*/
package main
import "fmt"
// 创建节点结构/类型
type Node struct {
Value interface{}
Next *Node
}
// 创建链表结构
type LinkedList struct {
Head *Node
Length int
}
type LinkedListMethod interface {
InsertNode(i int, val interface{}) // 新增节点
DeleteNode(i int) // 删除节点
GetNodeLength() int // 获取节点长度
SearchNode(val interface{}) int // 查询节点位置
IsNull() bool // 判断链表是否为空
PrintlnList() // 打印链表
}
// 创建节点
func CreateNode(val interface{}) *Node {
return &Node{val, nil}
}
// 创建空链表
func CreateLinkedList() *LinkedList {
return &LinkedList{CreateNode(nil), 0}
}
func (list *LinkedList) InsertNode(i int, val interface{}) {
n := CreateNode(val)
preNode := list.Head
for count := 0; count <= i; count++ {
if count == i-1 {
n.Next = preNode.Next
preNode.Next = n
list.Length++
}
preNode = preNode.Next
}
}
func (list *LinkedList) DeleteNode(i int) {
preNode := list.Head
for count := 0; count <= i-1; count++ {
n := preNode.Next
if count == i-1 {
preNode.Next = n.Next
list.Length--
}
preNode = preNode.Next
}
}
func (list *LinkedList) GetNodeLength() int {
return list.Length
}
func (list *LinkedList) SearchNode(val interface{}) int {
preNode := list.Head.Next
for i := 1; i <= list.Length; i++ {
if preNode.Value == val {
return i
}
preNode = preNode.Next
}
return 0
}
func (list *LinkedList) IsNull() bool {
return list.Head.Next == nil
}
func (list *LinkedList) PrintlnList() {
preNode := list.Head.Next
fmt.Println("linkedList show as follow: ...")
for i := 1; i <= list.Length; i++ {
if preNode != nil {
fmt.Printf("%v\n", preNode.Value)
preNode = preNode.Next
}
}
}