链表的实现

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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值