给你一个单链表,随机选择链表的一个节点,并返回相应的节点值。每个节点 被选中的概率一样 。
实现 Solution 类:
Solution(ListNode head) 使用整数数组初始化对象。
int getRandom() 从链表中随机选择一个节点并返回该节点的值。链表中所有节点被选中的概率相等。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/linked-list-random-node
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例:
//初始化一个单链表[1,2,3]
则头节点(head)为1,头节点的下一个节点为2,以此类推:
即 ListNode head=new ListNode(1);
head.next=new ListNode(2);......
//getRandom()方法应随机返回1,2,3中的一个,并保证每个元素被返回的概率相等
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
private ListNode head;
public Solution(ListNode head) {
this.head=head;//定义头节点
}
public int getRandom() {
int res=head.val;//将头节点中的val属性值传递给res
ListNode node=head.next;//定义链表头节点的下一个节点
int i=2;
Random random=new Random();//定义一个随机区间
while(node!=null)
{
if(random.nextInt(i)==0)//随机选择[0,i]里面的一个数
res=node.val;
i++;
node=node.next;
}
return res;
}
}
/**
* Your Solution object will be instantiated and called as such:
* Solution obj = new Solution(head);
* int param_1 = obj.getRandom();
*