Rumah > Soal Jawab > teks badan
就是leetcode382
Linked List Random Node
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.
然后我写的问题如下:
但是把self.head用新变量head,s或者其他什么字母声明一下,改成:
···
cnt = 0
head = self.head
while head:
if random.randint(0, cnt) == 0:
ans = head.val
head = head.next
cnt += 1
return ans
就通过了,AC了
为什么啊? 谢谢,实在不懂, 出错的那个测试用例我也不明白,这么多中括号表示什么啊?
ringa_lee2017-04-18 09:52:12
Oleh kerana ujian adalah untuk memanggil getRandom beberapa kali pada objek Penyelesaian yang sama, anda mengubah suai self.head objek dalam versi yang salah Selepas berbilang panggilan, self.head adalah Tiada, dan gelung while tidak dilaksanakan, jadi ralat dilaporkan mengatakan res Undefined versi yang diubah suai tidak mengubah kepala objek, jadi tiada ralat.
巴扎黑2017-04-18 09:52:12
Masalahnya terletak pada pembolehubah res
getRandom()
mengembalikan res
, tetapi sebelum pembolehubah res
dikembalikan, ia hanya dikembalikan dalam keadaan tertentu (keadaan while
dan keadaan if
. dipenuhi). Dengan mengandaikan bahawa while
badan gelung anda belum dilaksanakan, maka res
belum diberikan nilai sebelum dipulangkan.