当前位置: 首页 > 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://icebutterfly214.com/news/567/

相关文章:

  • 25.10.27
  • go构建streamablehttp mcp服务
  • 对Grid绑定移动
  • 10.27博客
  • [Mirror] LinuxMirrors: Linux 一键换源项目
  • 20232309 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 衡量模型生成图片质量的指标
  • 【转载】‘tensorrt.tensorrt.Builder‘ object has no attribute ‘build_cuda_engine‘
  • 20232403 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • WPF datagrid mvvm loaded 100M items,prism.wpf,prism.dryioc
  • sg.绑定键盘事件
  • 壁纸收集
  • Windows11安装miniconda
  • 10.27 CSP-S模拟40 改题记录
  • 详细介绍:Redis多租户资源隔离方案:基于ACL的权限控制与管理
  • 20251027周一日记
  • 学校协同云盘怎么选?2025年10大热门教育网盘推荐与对比
  • GPU集群之间的交互
  • CF1267G Game Relics
  • 102302115方朴第一次作业
  • 解题报告-梦熊 CSP-S2025 模拟赛T2
  • 鄙“站”麻将和算24,刷新后会换
  • 20232422 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 20232404 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 「WC2014-紫荆花之恋」题解
  • 谢谢你周医生
  • 来源未知
  • Date 10.27
  • 10.27及动手动脑
  • go包装bing搜索