总的来说,是实现某种概率。

382. 链表随机节点

  1. var Solution = function(head) {
  2. let map = new Map();
  3. let p = head;
  4. let i = 0;
  5. while(true) {
  6. if (p) {
  7. map.set(i, p);
  8. i++;
  9. p = p.next
  10. } else {
  11. break;
  12. }
  13. }
  14. this.map = map;
  15. this.length = i;
  16. };
  17. /**
  18. * @return {number}
  19. */
  20. Solution.prototype.getRandom = function() {
  21. let randomIndex = Math.floor(Math.random() * this.length);
  22. return this.map.get(randomIndex).val;
  23. };

但其实还有更简单的答案: