使用go语言对链表的实现详解
学习一门语言,最重要的事情就是了解其数据类型以及数据结构,链表作为入门之经典,不可不知道。实现了链表,也就懂得了数据结构、指针的调用关系。具体地阐述数据类型、数据结构以及内存之间的关系,笔者会另划一个篇幅。这里只是链表的基本实现,算是共同学习的心得记录了。
package main import "fmt" type Node struct { // 值 Data interface{} // 后继节点指针 Next *Node } // 链表是否为空 func IsEmpty(node *Node) bool { return node == nil } // 是否是最后一个节点 func IsLast(node *Node) bool { return node.Next == nil } // 查找前驱节点 func FindPrevious(index int, list *Node) *Node{ temp := list if index == 0{ return temp } for i:=0;i<index-1;i++{ temp = temp.Next } return temp } // 插入节点 func InsertList(index int,list *Node,data int) { temp := list if index == 0{ temp.Data = data return } if index <0{ fmt.Println("索引不合法") return } // 查找当前索引位置 for i := 0;i<index;i++{ if IsEmpty(temp){ fmt.Println("索引越界") return } temp = temp.Next } // 创建新节点 newNode :=Node{Data: data} // 新节点的Next指针指向当前位置 newNode.Next = temp // 查找前驱节点 pre := FindPrevious(index,list) // 前驱节点的Next指针指向新节点 pre.Next = &newNode } // 删除节点 func DeleteNode(index int,list *Node) { temp := list if index == 0{ return } // 查找当前索引位置 for i := 0;i<index;i++{ temp = temp.Next } // 查找前驱节点 pre := FindPrevious(index,list) // 前驱节点的Next指针指向后驱节点即可删除当前 pre.Next = temp.Next } // 末尾添加节点 func Append(list *Node,node *Node) { for list != nil { temp := list.Next if temp == nil{ list.Next = node break } list = list.Next } } // 打印所有的List func PrintList(list *Node) { temp := list for temp != nil { fmt.Println(temp.Data) temp = temp.Next } } func main() { // 创建头节点 headNode := &Node{ Data: 0, Next: nil, } node1 := &Node{ Data: 1, } node2 := &Node{ Data: 2, } Append(headNode,node1) Append(headNode,node2) InsertList(1,headNode,10) DeleteNode(3,headNode) PrintList(headNode) }
作者:符号哥
微信公众号:左侧为二维码
个人技术网站-编程符号网:http://www.itfh.cn
个人技术网站-IT源码网:http://www.itym.cn
新浪微博:https://weibo.com/u/2814576687
如果你想及时得到个人撰写文章以及著作的消息推送,或者想看看个人推荐的技术资料,可以扫描左边二维码(或者长按识别二维码)关注个人公众号。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号