我是靠谱客的博主 玩命电源,最近开发中收集的这篇文章主要介绍go链表(头指针和尾指针),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

要求: 创建一个空链表, 可以从头部插入任意数据, 也可以从尾部插入, 再遍历出来

分析: 首先肯定是需要一个链表型的结构体

         再用一个结构体分别指向链表的头和尾两个节点

         向链表添加元素时, 动态修改两个指针的指向

         主要弄清楚二者的关系就好理解了, 关系如下图:

上面是结构体链表

/*创建链表结构体, 用于表示实际链表上的节点*/
type LinkNode struct {
    data interface{}				// 数据为任意类型
    next *LinkNode
}

下面只是一个结构体变量, 有两个指针, 始终指向链表的头节点和尾节点

随着链表节点增加, 分别更改这两个指针就行了 

/*创建结构体, 用于代表链表的头节点和尾节点*/
type OneNode struct {
    head *LinkNode			//指向链表头节点
    tail *LinkNode			// 指向链表尾节点
}

最后循环链表的时候, 只需要根据OneNode的头指针获取到LinkNode链表的头节点就可以

/*循环链表*/
func (p *OneNode) Each() {
    node := p.head			
    for node != nil {
        fmt.Println(node.data)
        node = node.next
    }
}

完整代码:

package main
import "fmt"

/*创建链表结构体, 用于表示实际链表上的节点*/
type LinkNode struct {
    data interface{}				// 数据为任意类型
    next *LinkNode
}

/*创建结构体, 用于代表链表的头节点和尾节点*/
type OneNode struct {
    head *LinkNode				// 表示链表中的头节点
    tail *LinkNode				// 表示链表中的尾节点
} 

/*头部插入*/
func (p *OneNode)AddHead(d interface{}) {	
    /*创建节点*/
    var node = &LinkNode{
        data : d,
    }

    /*OneNode, 若为空, 则创建OneNode, 指向头尾节点*/
    if p.head == nil && p.tail == nil {
        p.tail = node
        p.head = node
        return
    }
    node.next = p.head		//连结
    p.head = node
}

/*尾部插入*/
func (p *OneNode)AddTail(d interface{}) {	
    /*创建节点*/
    var node = &LinkNode{
        data : d,
    }

    /*判断OneNode是否为空*/
    if p.head == nil && p.tail == nil {
        p.tail = node
        p.head = node
	    return
    }
    p.tail.next = node		//连结
    p.tail = node
}

/*循环链表*/
func (p *OneNode) Each() {
    node := p.head			// 遍历从头部开始(实际遍历的是Node)
    for node != nil {
        fmt.Println(node.data)
        node = node.next
    }
}
package main
import "strconv"

func main() {
    var link OneNode
    for i:=0; i<10;i++ {
        link.AddTail("A" + strconv.Itoa(i))
    }
    link.Each()
}

 

最后

以上就是玩命电源为你收集整理的go链表(头指针和尾指针)的全部内容,希望文章能够帮你解决go链表(头指针和尾指针)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部