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.
int getRandom() { int res = head->val; ListNode* node = head->next; int i = 2; while(node){ int j = rand()%i; if(j==0) res = node->val; i++; node = node->next; } return res; } 证:设有n个数,显然,第n个数的概率为1/n
所以前n-1个数的概率为(n-1)/n
第n-1个数的概率为((n-1)/n) *(1/(n-1)) = 1/n
同理,前n-2个数的概率为(n-2)/n
第n-2个数的概率为((n-2)/n) *(1/(n-2)) = 1/n
。
前2(n-(n-2))个数的概率为2/n,
第2个数的概率为2/n * 1/2 = 1/n
前1个数的概率为1/n,
所以每个数输出的概率均等为1/n。
