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

《零基础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)

}


http://www.kler.cn/a/505563.html

相关文章:

  • 《零基础Go语言算法实战》【题目 2-20】通过泛型比较大小
  • 设计模式--命令模式【行为型模式】
  • 【JavaWeb01】JavaWeb开发基础:HTML的深度解析与应用
  • 【计算机网络】lab8 DNS协议
  • Postman下载与使用,新手详细
  • android T 建立文件夹及文件的记录
  • Unity自带的真车模拟系统,速度不够大r时如何以匀速上桥
  • c++ string 类实现
  • 【I/O编程】UNIX文件基础
  • 深度学习中PyTorch张量的重塑操作
  • 下载文件,浏览器阻止不安全下载
  • 前端如何设计一个回溯用户操作的方案
  • c++ 手写queue循环队列
  • Windows 上的 MySQL 8.4.3 和 WSL(Ubuntu)的 MySQL 8.0.40 之间配置 主从同步
  • linux系统监视(centos 7)
  • 数据结构9——二叉搜索树
  • 使用Struts2遇到的Context[项目名称]启动失败问题解决(Java Web学习笔记)
  • 虚拟线程JDK与Spring Core Reactor
  • 2025windows环境下安装RabbitMQ
  • Frida调试il2cpp的程序打印原生c#对象为json