golang实现单链表的基本操作

 

package main

import (
	"fmt"
)

type Element interface {
}
type LinkList struct {
	Data Element   //数据域
	Nest *LinkList //指针域
}

func (head *LinkList) GetLength() int {
	point := head
	var length int
	for point != nil {
		length++
		point = point.Nest

	}
	return length

} //获取链表的长度

func (head *LinkList) Traverse() {
	point := head
	for point != nil {
		fmt.Println(point.Data) //输出数据
		point = point.Nest

	}
} //遍历链表
func (head *LinkList) Delete(index int) Element {
	if index < 0 || index > head.GetLength() {
		fmt.Println("index不合法")
		return false

	} else {
		point := head
		for i := 0; i < index; i++ {
			point = point.Nest //移动位置

		}
		point.Nest = point.Nest.Nest
		data := point.Nest.Data
		return data
	}

} //删除指定位置的节点
func (head *LinkList) Insert(index int, data Element) {
	if index < 0 || index > head.GetLength() {
		fmt.Println("数据不合法")
	} else {
		point := head
		for i := 0; i < index; i++ {
			point = point.Nest //移动位置
		}
		var NewLinkList LinkList //新的节点
		NewLinkList.Data = data
		NewLinkList.Nest = point.Nest
		point.Nest = &NewLinkList
	}

} //在指定index位置插入数据
func (head *LinkList) Search(data Element) {
	point := head
	index := 0
	for point.Nest != nil {
		if point.Data == data {
			fmt.Println(data, "show in at index: ", index)
			break
		} else {
			index++
			point = point.Nest
			if index > head.GetLength() {
				fmt.Println("no this data in the LinkList!!!")
				break
			}
			continue
		}
	}
} //搜寻data数据
func (head *LinkList) GetData(index int) Element {
	point := head
	if index < 0 || index > head.GetLength() {
		return false

	} else {

		for i := 0; i < index; i++ {
			point = point.Nest //移动位置
		}
		return point.Data
	}

} //拿取LinkList中index位置的元素
func (head *LinkList) Add(data Element) {
	point := head
	for point.Nest != nil {
		point = point.Nest //移动位置

	}
	var NewLinklist LinkList
	point.Nest = &NewLinklist //newlinklist接在point.nest之后
	NewLinklist.Data = data

} //给linklist增加数据

func main() {
	var head LinkList = LinkList{Data: 0, Nest: nil}
	var array []Element
	for i := 0; i < 9; i++ {
		array = append(array, Element(i+1))
		head.Add(array[i]) //增加数据

	}
	head.Traverse() //遍历linklist
	head.Search(8)  //查询数据
	fmt.Println("length:", head.GetLength())
	fmt.Println("data:", head.GetData(9))
	head.Delete(2) //删除索引为2 的数据
	head.Traverse()//遍历数据

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值