《零基础Go语言算法实战》【题目 4-6】随机选择单链表的一个节点并返回

《零基础Go语言算法实战》

【题目 4-6】随机选择单链表的一个节点并返回

给定一个单链表,请随机选择链表的一个节点,并返回相应的节点值。保证每个节点被

选择的概率相同。

【解答】

① 思路。

通过 rand.Float64() 函数可以返回 [0,1) 范围内的随机数,利用这个函数完成随机化选择

节点的过程。

② Go 语言实现。

package main

import (

"fmt"

"math/rand"

)

// 定义单链表

type ListNode struct {

Data int

Next *ListNode

}

type Head struct {

head *ListNode

}

// 初始化链表

func NewListNode(head *ListNode) Head {

return Head{head: head}

}

// 返回随机节点的值

func (h *Head) GetRandom() int {

scope, selectPoint, curr := 1, 0, h.head

for curr != nil {

if rand.Float64() < 1.0/float64(scope) {

selectPoint = curr.Data

}

scope += 1

curr = curr.Next

}

return selectPoint

}

func main() {

nodeList := ListNode{6, nil}

head := NewListNode(&nodeList)

obj := NewListNode(head.head)

ret := obj.GetRandom()

fmt.Println(ret)

}

相关推荐
路弥行至10 小时前
C语言入门教程 | 第七讲:函数和程序结构完全指南
c语言·经验分享·笔记·其他·算法·课程设计·入门教程
Xの哲學10 小时前
Linux ioctl 深度剖析:从原理到实践
linux·网络·算法·架构·边缘计算
隐语SecretFlow10 小时前
隐语SecreFlow:如何全面提升MPC多方安全学习的性能?
算法
王国强200910 小时前
什么是算法复杂度?
算法
夏鹏今天学习了吗10 小时前
【LeetCode热题100(54/100)】全排列
算法·leetcode·深度优先
緈福的街口11 小时前
gps的定位图,在车的位置去寻找周围20x20的区域,怎么确定周围有多少辆车,使用什么数据结构
数据结构·算法
江塘11 小时前
机器学习-KNN算法实战及模型评估可视化(C++/Python实现)
开发语言·c++·人工智能·python·算法·机器学习
麦麦大数据12 小时前
F039 python五种算法美食推荐可视化大数据系统vue+flask前后端分离架构
python·算法·vue·推荐算法·美食·五种算法
星空露珠12 小时前
数独解题算法lua脚本
开发语言·数据结构·算法·游戏·lua
小猪咪piggy12 小时前
【算法】day14 链表
数据结构·算法·链表