/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
type Solution struct {
	arr []int
	n   int
}

/** @param head The linked list's head.
  Note that the head is guaranteed to be not null, so it contains at least one node. */
func Constructor(head *ListNode) (sol Solution) {
	for curr := head; curr != nil; curr = curr.Next {
		sol.arr = append(sol.arr, curr.Val)
		sol.n++
	}
	return
}

/** Returns a random node's value. */
func (this *Solution) GetRandom() int {
	return this.arr[rand.Intn(this.n)]
}

/**
 * Your Solution object will be instantiated and called as such:
 * obj := Constructor(head);
 * param_1 := obj.GetRandom();
 */