当前位置: 首页 > news >正文

数据结构 の go语言实现

双向链表

双向链表的插入和遍历输出

package mainimport ("fmt""math/rand""time"
)type Node struct {Data     intPrePoint *NodeNextPont *Node
}type LinkList struct {head    *Nodecurrent *Nodetail    *Node
}func main() {rand.New(rand.NewSource(time.Now().UnixNano()))datas := make([]int, 10)for i := range 10 {datas[i] = rand.Intn(100)}fmt.Println(datas)linklists := new(LinkList)for _, v := range datas {node := new(Node)node.Data = vlinklists.Insert(node)}linklists.ShowLinkList()
}
func (l *LinkList) Insert(node *Node) {if l.head == nil {l.head = nodel.current = nodel.tail = node} else {l.tail.NextPont = nodenode.PrePoint = l.taill.tail = node // 只移动尾,头指针一直不动,中间的指针也一直不动}
}func (l *LinkList) ShowLinkList() {for c := l.head; c != nil; c = c.NextPont {fmt.Println(c.Data)}
}

合并两个递增链表

package mainimport ("fmt""math/rand""time"
)type Node struct {Data     intPrePoint *NodeNextPont *Node
}type LinkList struct {head    *Nodecurrent *Nodetail    *Node
}func main() {rand.New(rand.NewSource(time.Now().UnixNano()))l1, l2 := new(LinkList), new(LinkList)n1, n2 := 0, 0for range 10 {n1 += rand.Intn(10)n2 += rand.Intn(10)l1.Insert(&Node{Data: n1})l2.Insert(&Node{Data: n2})}l1.ShowLinkList()l2.ShowLinkList()fmt.Println("===================================")m := merge(l1, l2)m.ShowLinkList()}
func (l *LinkList) Insert(node *Node) {if l.head == nil {l.head = nodel.current = nodel.tail = node} else {l.tail.NextPont = nodenode.PrePoint = l.taill.tail = node // 只移动尾,头指针一直不动,中间的指针也一直不动}
}func (l *LinkList) ShowLinkList() {values := make([]int, 0)for c := l.head; c != nil; c = c.NextPont {values = append(values, c.Data)}fmt.Println(values)
}
func merge(l1, l2 *LinkList) (m *LinkList) {m = new(LinkList)c1, c2 := l1.head, l2.headfor c1 != nil && c2 != nil {// 这里是合并递增链表,所以排小的在前面if c1.Data < c2.Data {m.Insert(&Node{Data: c1.Data})c1 = c1.NextPont} else {m.Insert(&Node{Data: c2.Data})c2 = c2.NextPont}}for c1 != nil {m.Insert(&Node{Data: c1.Data})c1 = c1.NextPont}for c2 != nil {m.Insert(&Node{Data: c2.Data})c2 = c2.NextPont}return m
}
http://www.hskmm.com/?act=detail&tid=40230

相关文章:

  • AI元人文:自主构建
  • VS2022 17.14.18 (October 2025) MAUI编译失败,提示 ios net8无效
  • Ai元人文构想:自动驾驶伦理解析——从静态规则到动态涌现
  • 【ESP32 在线语音】ESP32的I2S音频数据开发
  • 哈希表的底层原理
  • 【ESP32 在线语音】C++中constexpr 修饰词的科普
  • 【ESP32 在线语音】Base64编码的科普
  • GroundingDino针对航空图像检测的改进 MM Grounding Dino Large - MKT
  • 看了个介绍音频相关的视频有感,44100HZ 就是母带
  • GroundingDino目标跟踪+sam2分割 - MKT
  • 【解决方法】通过windows远程桌面连接centos stream10_基于xrdp(网上搜出来的路径里找不到startwm.sh)
  • 25.10.27
  • 在服务器上直接从百度网盘下载文件
  • 【ESP32 在线语音】讯飞星火语音识别功能(听写流式API)文档阅读
  • 10月27日
  • newDay16
  • 新学期每日总结(第14天)
  • 2025.10.27
  • 示性函数引入
  • 算法分析--分治--2.归并排序
  • Vue2随笔-251027
  • Java: Jdk17 异步或同步或并行发邮件
  • 《程序员修炼之道:从小工到专家》笔记3
  • 2025.10.27总结
  • CCUT应用OJ题解——贪吃的松鼠
  • 噪声点验证码的图像处理与识别思路
  • Huggingface 禁止XET后端
  • 对Grid绑定移动
  • 10.27博客
  • 关于结对编程的一些感悟