Leetcode 382 Solution

This article provides solution to leetcode question 382 (linked-list-random-node)

https://leetcode.com/problems/linked-list-random-node

Solution

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { ListNode* m_head; int m_n; public: /** @param head The linked list's head. Note that the head is guaranteed to be not null, so it contains at least one node. */ Solution(ListNode* head) { m_head = head;
m_n = 0;
while (head) { m_n++; head = head->next; } }
/** Returns a random node's value. */ int getRandom() { ListNode* p = m_head; int left_nodes = m_n;
while (p) { if (rand() % left_nodes == 0) return p->val;
p = p->next; left_nodes--; }
return 0; } };
/** * Your Solution object will be instantiated and called as such: * Solution obj = new Solution(head); * int param_1 = obj.getRandom(); */