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

相关文章:

  • VS2022 17.14.18 (October 2025) MAUI编译失败,提示 ios net8无效
  • Ai元人文构想:自动驾驶伦理解析——从静态规则到动态涌现
  • 【ESP32 在线语音】ESP32的I2S音频数据开发
  • 哈希表的底层原理
  • 【ESP32 在线语音】Base64编码的科普
  • GroundingDino针对航空图像检测的改进 MM Grounding Dino Large - MKT
  • 人工智能十大数学知识 - 数理逻辑 - 何苦
  • 看了个介绍音频相关的视频有感,44100HZ 就是母带
  • GroundingDino目标跟踪+sam2分割 - MKT
  • 人工智能十大数学知识 - 复杂性理论 - 何苦
  • 人工智能十大数学知识 - 群论 - 何苦
  • 人工智能十大数学知识 - 离散数学 - 何苦
  • 人工智能十大数学知识 - 优化理论 - 何苦
  • 【解决方法】通过windows远程桌面连接centos stream10_基于xrdp(网上搜出来的路径里找不到startwm.sh)
  • 人工智能十大数学知识 - 图论 - 何苦
  • 人工智能十大数学知识 - 信息论 - 何苦
  • 人工智能十大数学知识 - 概率与统计学 - 何苦
  • 在服务器上直接从百度网盘下载文件
  • 25.10.27
  • 251028
  • 刷题日记—链表—快慢指针的应用
  • 【SHADER系列】(四)UGUI 渐变/平滑遮罩 SoftMask
  • 【SHADER系列】(四)UGUI 渐变/平滑遮罩 SoftMask
  • 刷题日记——链表—二进制转十进制,虚拟头结点
  • newDay16
  • Hamiltonian H
  • 透明代理和uups代理,哪个更省gas,为什么
  • 新学期每日总结(第14天)
  • 示性函数引入
  • 2025.10.27