链表随机节点

题目链接

 解法一:

链表转数组,直接调用随机函数返回即可

复制代码
class Solution {
    vector<int> vt;
public:
    Solution(ListNode *head) {
        while (head) {
            vt.push_back(head->val);
            head = head->next;
        }
    }
    int getRandom() {
        return vt[rand() % vt.size()];
    }
};
复制代码

解法二:

水塘抽样法

基本的应用:证明点击跳转我的另一篇博客

复制代码
class Solution {
public:
    ListNode* root;
    Solution(ListNode* head) {
        root=head;
    }
    
    int getRandom() {
        int ans = root->val;
        int id = 1;
        auto t = root;
        while(t!=NULL){
            if(rand()%id==0){
                ans=t->val;
            }
            id++;
            t=t->next;
        }
        return ans;
    }
};
复制代码

 

posted @   夜灯长明  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示