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

进阶:
如果链表十分大且长度未知,如何解决这个问题?你能否使用常数级空间复杂度实现?

示例:

// 初始化一个单链表 [1,2,3].
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
Solution solution = new Solution(head);// getRandom()方法应随机返回1,2,3中的一个,保证每个元素被返回的概率相等。
solution.getRandom();

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    /** @param head The linked list's head.
        Note that the head is guaranteed to be not null, so it contains at least one node. */
    Solution(ListNode* head) {
        len = 0;
        ListNode *cur = head;
        this->head = head;
        while (cur) {
            ++len;
            cur = cur->next;
        }
    }
    
    /** Returns a random node's value. */
    int getRandom() {
        int t = rand() % len;
        ListNode *cur = head;
        while (t) {
            --t;
            cur = cur->next;
        }
        return cur->val;
    }
private:
    int len;
    ListNode *head;
};

/**
 * Your Solution object will be instantiated and called as such:
 * Solution obj = new Solution(head);
 * int param_1 = obj.getRandom();
 */

382.链表随机节点相关推荐

  1. LeetCode 382. 链表随机节点(概率)

    1. 题目 给定一个单链表,随机选择链表的一个节点,并返回相应的节点值.保证每个节点被选的概率一样. 进阶: 如果链表十分大且长度未知,如何解决这个问题?你能否使用常数级空间复杂度实现? 来源:力扣( ...

  2. Leetcode 382. 链表随机节点 解题思路及C++实现

    解题思路: 因为题目中要求需要常数级的空间复杂度,所以就需要计算链表长度了. /*** Definition for singly-linked list.* struct ListNode {* i ...

  3. leetcode 382. Linked List Random Node | 382. 链表随机节点(Java)

    题目 https://leetcode.com/problems/linked-list-random-node/ 题解 先存起来,再随机返回即可.不知道在考察什么? /*** Definition ...

  4. [Swift]LeetCode382. 链表随机节点 | Linked List Random Node

    原文地址:https://www.cnblogs.com/strengthen/p/10282841.html Given a singly linked list, return a random ...

  5. 每天一道LeetCode-----复制一个带有随机节点的链表

    Copy List with Random Pointer 原题链接Copy List with Random Pointer 深拷贝一个链表,链表节点的成员包括 指向下一个节点的指针 指向一个随机节 ...

  6. Leetcode-链表随机节点

    原题:链表随即节点 分析: 本题使用的是水塘算法进行随机选择.如何理解? 举个例子: 池子里如果有一个数字,则这个数字被取到的概率是100% 池子里如果有两个数字,则这个数字被取到的概率是50% 如果 ...

  7. 剑指offer:面试题18. 删除链表的节点

    题目:删除链表的节点 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], ...

  8. 【Java】LeetCode 876 获取链表中间节点

    题目:给定一个头结点为 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 解题思路 : 获取链表中间节点,算法思想是利用快慢指针 : 1.如上图分析,奇数节点链 ...

  9. 《程序员代码面试指南》第二章 链表问题 构造链表和节点的实体

    准备一些链表和节点的实体,方便后面使用 java代码 /*** @Description:构造一个链表实体,方便后续构造链表* @Author: lizhouwei* @CreateDate: 201 ...

  10. Leetcode 24.两两交换链表的节点 (每日一题 20210624)

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表.你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换.示例 1:输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 ...

最新文章

  1. R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(双分类变量分组可视化)实战(dot plot)
  2. 思科防火墙PIX ASA精华配置总结
  3. mysql查看在线用户
  4. python 机器学习管道_构建机器学习管道-第1部分
  5. 写出整洁的高效的js代码
  6. 第 133 章 FAQ
  7. Linux 常用的软件包管理器/软件包管理工具
  8. java基础day11---空指针异常----引用类型--自定义类型赋值--封装
  9. 2020巨量引擎用户旅游全周期行为动机调研报告
  10. MATLAB图片的保存与导出
  11. 【LeetCode】【HOT】20. 有效的括号(栈)
  12. 我发现了一个价值8500美元的 HackerOne 平台漏洞
  13. 4.7 ResNet CNN、tensorflow实现——python实战
  14. 深入浅出插入类排序算法(直接插入, 折半插入, 希尔排序)
  15. 良心安利益智休闲游戏源代码素材网站
  16. oracle vm virtualbox增强功能,VirtualBox增强功能包下载
  17. 面试题:你印象最深刻的两个bug是什么,你是怎么解决的?
  18. Android基于opencv4.6.0实现人脸识别功能
  19. AutoCAD2014官方原版软件下载
  20. 基于Springboot和Mybatis的文件上传与下载

热门文章

  1. 用C#开发Windows服务
  2. 持久化存储与HTTP缓存
  3. 【夯实基础】Spring在ssh中的作用
  4. linux系统编程之进程(二):进程生命周期与PCB(进程控制块)
  5. 怎样做网站,需要考虑的几个seo因素
  6. WINHEX Scripts
  7. PUT 还是 POST ?
  8. wordpress上传图片按时间重命名
  9. STC学习:霍尔开关器件
  10. 李华上大学了吗?(I)