>  Q&A  >  본문

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了

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

迷茫迷茫2742일 전972

모든 응답(2)나는 대답할 것이다

  • ringa_lee

    ringa_lee2017-04-18 09:52:12

    동일한 Solution 개체에 대해 getRandom을 여러 번 호출하는 테스트이므로 잘못된 버전에서 개체의 self.head를 수정했습니다. 여러 번 호출한 후 self.head가 None이고 while 루프가 실행되지 않습니다. 수정된 버전은 개체 헤드를 변경하지 않으므로 오류가 없다는 오류가 보고됩니다.

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:52:12

    문제는 res 변수에 있습니다. getRandom()res을 반환하지만 res 변수가 반환되기 전에는 특정 조건(while 조건 및 if 조건에서만 반환됩니다.) 충족됨). while 루프 본문이 실행되지 않았다고 가정하면 res은 반환되기 전에 값이 할당되지 않았습니다. Python 인터프리터는 어떤 값을 반환할지 모르므로 오류를 보고합니다.

    회신하다
    0
  • 취소회신하다