博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
382 Linked List Random Node 链表随机节点
阅读量:5285 次
发布时间:2019-06-14

本文共 2287 字,大约阅读时间需要 7 分钟。

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

进阶:
如果链表十分大且长度未知,如何解决这个问题?你能否使用常数级空间复杂度实现?
示例:
// 初始化一个单链表 [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();
详见:https://leetcode.com/problems/linked-list-random-node/description/

C++:

方法一:

/** * 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;        this->head=head;        ListNode *cur=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(); */

 方法二:

/** * 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) {        this->head=head;    }        /** Returns a random node's value. */    int getRandom() {        int res=head->val;        int i=2;        ListNode *cur=head->next;        while(cur)        {            int j=rand()%i;            if(j==0)            {                res=cur->val;            }            ++i;            cur=cur->next;        }        return res;    }private:    ListNode *head;};/** * Your Solution object will be instantiated and called as such: * Solution obj = new Solution(head); * int param_1 = obj.getRandom(); */

 参考:https://www.cnblogs.com/grandyang/p/5759926.html

转载于:https://www.cnblogs.com/xidian2014/p/8849202.html

你可能感兴趣的文章
MySQL通过frm 和 ibd 恢复数据过程
查看>>
SRS源码——Listener
查看>>
Java面向对象抽象类案例分析
查看>>
对SPI、IIC、IIS、UART、CAN、SDIO、GPIO的解释
查看>>
Thymeleaf模板格式化LocalDatetime时间格式
查看>>
庖丁解“学生信息管理系统”
查看>>
Pyltp使用
查看>>
其他ip无法访问Yii的gii,配置ip就可以
查看>>
php做的一个简易爬虫
查看>>
x的x次幂的值为10,求x的近似值
查看>>
jquery获取html元素的绝对位置和相对位置的方法
查看>>
ios中webservice报文的拼接
查看>>
Power BI 报告的评论服务支持移动设备
查看>>
ACdream 1068
查看>>
HDU 2665 Kth number
查看>>
记叙在人生路上对你影响最大的三位老师
查看>>
002.大数据第二天
查看>>
python装饰器
查看>>
树上的路径
查看>>
问题总结
查看>>