链表随机节点

给你一个单链表,随机选择链表的一个节点,并返回相应的节点值。每个节点 被选中的概率一样 。

实现 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();

 *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值