package main
import "fmt"
type Node struct {
Data interface{}
Next *Node
}
type LinkedList struct {
first *Node
size int
}
var linkedList *LinkedList = &LinkedList{} //初始化链表
func NewLinkedList() *LinkedList {
return &LinkedList{}
}
/**
添加(在头部添加)
*/
func (link *LinkedList) Add(value interface{}) int {
node := &Node{}
node.Data = value
//判读头结点是否有头指针地址
if linkedList.first == nil {
linkedList.first = node
linkedList.size++
return linkedList.size
}
node.Next = linkedList.first
linkedList.first = node
linkedList.size++
return linkedList.size
}
/**
获取指定位置的元素
*/
func (link *LinkedList) Get(i int) interface{} {
if linkedList.first == nil || i >= linkedList.size {
return nil
}
var node = linkedList.first
n := 1
for node != nil && n <= i {
node = node.Next
n++
}
if node == nil {
return nil
}
return node.Data
}
/**
指定位置插入元素
*/
func (link *LinkedList) Insert(value interface{}, i int) int {
if linkedList.first == nil || i >= linkedList.size {
return -1
}
var node = linkedList.first
n := 1
for node != nil && n <= i {
node = node.Next
n++
}
if node == nil {
return -1
}
insert := &Node{}
insert.Data = node.Data
node.Data = value
insert.Next = node.Next
node.Next = insert
linkedList.size++
return i
}
/**
删除指定位置插入元素
*/
func (link *LinkedList) Delete(i int) int {
if linkedList.first == nil || i >= linkedList.size {
return -1
}
var node = linkedList.first
n := 1
for node != nil && n <= i {
node = node.Next
n++
}
if node == nil {
return -1
}
fmt.Println(node)
if node.Next != nil {
node.Data = node.Next.Data
node = node.Next
linkedList.size--
}
return i
}
/**
在链尾部添加
*/
func (link *LinkedList) Append(value interface{}) int {
if linkedList.first == nil {
node := &Node{}
node.Data = value
linkedList.first = node
linkedList.size++
return linkedList.size
}
var node = linkedList.first
n := 1
for node != nil && n < linkedList.size {
node = node.Next
n++
}
next := &Node{}
next.Data = value
node.Next = next
linkedList.size++
return linkedList.size
}
func (link *LinkedList) Size() int {
return linkedList.size
}
func main() {
l := NewLinkedList()
//l.Append("E")
//l.Append("F")
//fmt.Println("link size:",l.Size())
//fmt.Println(linkedList.first.Data)
//fmt.Println(linkedList.first.Next.Data)
///l.Insert("C",0)
l.Append("A")
l.Append("B")
fmt.Println(l.Get(0))
fmt.Println("link size:", l.Size())
l.Delete(0)
fmt.Println(l.Get(0))
fmt.Println("link size:", l.Size())
// 1-C 2-B 3-A
//fmt.Println(l.Get(0),l.Get(1),l.Get(2),l.Get(3),l.Get(4)) //D C B A E
}
链表的实现
最新推荐文章于 2022-10-16 16:14:18 发布