# 【LeetCode】382. Linked List Random Node 解题报告（Python & C++）

900 篇文章 136 订阅
1033 篇文章 43 订阅

id： fuxuemingzhu

## 题目描述

Given a singly linked list, return a random node’s value from the linked list. Each node must have the same probability of being chosen.

What if the linked list is extremely large and its length is unknown to you? Could you solve this efficiently without using extra space?

Example:

// Init a singly linked list [1,2,3].

// getRandom() should return either 1, 2, or 3 randomly. Each element should have equal probability of returning.
solution.getRandom();


## 解题方法

### 数组保存再随机选择

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):

"""
Note that the head is guaranteed to be not null, so it contains at least one node.
"""
self.stack = []

def getRandom(self):
"""
Returns a random node's value.
:rtype: int
"""
_len = len(self.stack)
return self.stack[random.randint(0, _len - 1)]

# Your Solution object will be instantiated and called as such:
# param_1 = obj.getRandom()


### 蓄水池抽样

/**
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
Note that the head is guaranteed to be not null, so it contains at least one node. */
}

/** Returns a random node's value. */
int getRandom() {
int cnt = 0, res = 0;
++cnt;
if (rand() % cnt == 0)
}
return res;
}
private:
ListNode* h_;
};

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


## 日期

2018 年 3 月 8 日
2019 年 2 月 26 日 —— 二月就要完了

10-27 9822
09-17 9254
02-27 2万+
11-08 2348
10-27 303
12-05 338

### “相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

¥2 ¥4 ¥6 ¥10 ¥20

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、C币套餐、付费专栏及课程。