go语言 链表练习

Posted heroic_zjx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言 链表练习相关的知识,希望对你有一定的参考价值。

package main

import "fmt"

//定义节点
type Node struct {
	Data int
	Next *Node
}

/*
* 返回第一个节点
* h 头结点
 */
func GetFirst(h *Node) *Node {
	if h.Next == nil {
		return nil
	}
	return h.Next
}

/*
* 返回最后一个节点
* h 头结点
 */
func GetLast(h *Node) *Node {
	if h.Next == nil {
		return nil
	}
	i := h
	for i.Next != nil {
		i = i.Next
		if i.Next == nil {
			return i
		}
	}
	return nil
}

//取长度
func GetLength(h *Node) int {
	var i int = 0
	n := h
	for n.Next != nil {
		i++
		n = n.Next
	}
	return i
}

//插入一个节点
//h: 头结点
//d:要插入的节点
//p:要插入的位置
func Insert(h, d *Node, p int) bool {
	if h.Next == nil {
		h.Next = d
		return true
	}
	i := 0
	n := h
	for n.Next != nil {
		i++
		if i == p {
			if n.Next.Next == nil {
				n.Next = d
				return true
			} else {
				d.Next = n.Next
				n.Next = d.Next
				return true
			}
		}
		n = n.Next
		if n.Next == nil {
			n.Next = d
			return true
		}
	}
	return false
}

//取出指定节点
func GetLoc(h *Node, p int) *Node {
	if p < 0 || p > GetLength(h) {
		return nil
	}
	var i int = 0
	n := h
	for n.Next != nil {
		i++
		n = n.Next
		if i == p {
			return n
		}
	}
	return nil
}

func main() {
	var h Node
	li := []int{2, 4, 3}
	for _, l := range li {
		var d Node
		d.Data = l
		Insert(&h, &d, l)
	}

	var i Node
	ls := []int{5, 6, 4}
	for _, s := range ls {
		var dd Node
		dd.Data = s
		Insert(&i, &dd, s)
	}

	sum := 0
	sum = GetLoc(&h, 3).Data*100 + GetLoc(&h, 2).Data*10 + GetLoc(&h, 1).Data + GetLoc(&i, 3).Data*100 + GetLoc(&i, 2).Data*10 + GetLoc(&i, 1).Data
	fmt.Println(sum)
}

  

以上是关于go语言 链表练习的主要内容,如果未能解决你的问题,请参考以下文章

go语言小练习——给定英语文章统计单词数量

Go36-8-链表

Go语言的list包(列表)链表

Go语言的list包(列表)链表

C语言链表写法,练习链表

你知道的Go切片扩容机制可能是错的