Maison > Questions et réponses > le corps du texte
就是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
Comme le test consiste à appeler getRandom plusieurs fois sur le même objet Solution, vous avez modifié le self.head de l'objet dans la mauvaise version. Après plusieurs appels, self.head vaut None et la boucle while n'est pas exécutée, donc un. une erreur est signalée disant res Undefined ; la version modifiée ne change pas l’en-tête de l’objet, il n’y a donc pas d’erreur.
巴扎黑2017-04-18 09:52:12
Le problème réside dans la variable res
. getRandom()
renvoie res
, mais avant que la variable res
ne soit renvoyée, elle n'est renvoyée que sous certaines conditions (la condition while
et la condition if
sont remplies). En supposant que le corps de votre boucle while
n'a pas été exécuté, alors res
n'a pas reçu de valeur avant de revenir. L'interpréteur python ne sait pas quelle valeur renvoyer, il signale donc une erreur.