Maison  >  Questions et réponses  >  le corps du texte

python - leetcode返回单链表任意节点,提示未声明?

就是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了

为什么啊? 谢谢,实在不懂, 出错的那个测试用例我也不明白,这么多中括号表示什么啊?

迷茫迷茫2764 Il y a quelques jours1001

répondre à tous(2)je répondrai

  • ringa_lee

    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.

    répondre
    0
  • 巴扎黑

    巴扎黑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.

    répondre
    0
  • Annulerrépondre