go语言 单向链表

//示例45
package main

import "fmt"

func main() {
  var intlink Link
  for i := 0; i < 10; i++ {
    intlink.InsertTail(i)
  }
  intlink.Trans()
}

//节点
type LinkNode struct {
  data interface{} //内容
  next *LinkNode //next指针
}

//链表
type Link struct {
  head *LinkNode //头节点
  tail *LinkNode //尾节点
}

//头插法
func (p *Link) InsertHead(data interface{}) {
//获取一个节点
  node := &LinkNode{
    data: data,
    next: nil,
  }
  //判断是否第一个节点,如果是头节点和尾节点都是自己
  if p.tail == nil && p.head == nil {
    p.tail = node
    p.head = node
    return
  }
  //如果不是第一个节点 新节点的next是链表的头节点
  node.next = p.head
  //链表头节点指向新节点
  p.head = node

}

//尾插法
func (p *Link) InsertTail(data interface{}) {
  node := &LinkNode{
  data: data,
  next: nil,
}

  //判断是否第一个节点,如果是头指针和尾指针都是自己
  if p.tail == nil && p.head == nil {
    p.tail = node
    p.head = node
    return
  }

  //链表的尾节点的next指针指向新节点
  p.tail.next = node
  //链表的尾节点指向新节点
  p.tail = node

}

//遍历
func (p *Link) Trans() {
q := p.head
for q != nil {
fmt.Println(q.data)
q = q.next //移动指针
}
}
posted @   5656923  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示