GESP Python 5级 2026.06
假设 head 不为空,下面是实现单向循环链表在头节点后插入新节点的代码,横线处应填入( )。
class Node:
def __init__(self, val):
self.val = val
self.next = None
def insert_after_head(head, x):
new_node = Node(x)
____________________
new_node.next = head.next
head.next = new_node
new_node.next = head
head.next = new_node
head.next = new_node
new_node.next = head
new_node.next = head.next
head = new_node
下面代码遍历并输出一个循环单链表,其中 head 指向链表的第一个节点,横线处应填入的是( )。
class Node:
def __init__(self, val):
self.val = val
self.next = None
def printList(head):
if head is None:
return
p = head
_______________________
print()
while p is not None:
print(p.val, end=" ")
p = p.next
while p.next is not None:
print(p.val, end=" ")
p = p.next
while True:
print(p.val, end=" ")
p = p.next
if p == head:
break
while p:
print(p.val, end=" ")
p = p.next
双链表结点定义如下,若要删除双链表中的中间结点(非首尾节点)p,写法正确的是( )。
class Node:
def __init__(self, val):
self.val = val
self.prev = None
self.next = None
p.prev.next = p.next
p.next.prev = p.prev
del p
p.next.prev = p.next
p.prev.next = p.prev
del p
p.prev = p.next
p.next = p.prev
del p
p.next.next = p.prev
p.prev.prev = p.next
del p
使用如下欧几里得算法求 gcd(105, 45) 时,函数 gcd(a, b) 的递归调用序列正确的是( )。
def gcd(a, b):
return a if b == 0 else gcd(b, a % b)
gcd(105, 45) -> gcd(45, 60) -> gcd(60, 15) -> gcd(15, 0)
gcd(105, 45) -> gcd(45, 15) -> gcd(15, 0)
gcd(105, 45) -> gcd(60, 45) -> gcd(15, 45)
gcd(105, 45) -> gcd(15, 45) -> gcd(15, 0)
下面代码实现线性筛(欧拉筛),以筛选出 n 以内的所有素数。横线处的代码应为( )。
def sieve(n):
is_prime = [True] * (n + 1)
primes = []
if n >= 0:
is_prime[0] = False
if n >= 1:
is_prime[1] = False
for i in range(2, n + 1):
if is_prime[i]:
primes.append(i)
j = 0
while j < len(primes) and i * primes[j] <= n:
is_prime[i * primes[j]] = False
if ________________: # 在此处填入代码
break
j += 1
return primes
i % primes[j] == 0
primes[j] % i == 0
i % primes[j] != 0
i == primes[j]
下面关于埃氏筛法的说法正确的是( )。
每个合数只会被筛掉一次
从每个素数出发,把它的倍数标记为合数
只能判断一个数是不是偶数
不能求出素数表
下面代码实现了计算 的快速幂算法,该算法体现的编程思想是( )。
def power(x, n):
if n == 0:
return 1
res = power(x, n // 2)
if n % 2 == 0:
return res * res
else:
return res * res * x
枚举
贪心
分治
模拟
下面代码用于统计 n 中因子 2 出现了多少次。若 n = 40,输出是( )。
n = 40
cnt = 0
while n % 2 == 0:
cnt += 1
n = n // 2
print(cnt)
1
2
3
4
在一个有序数组中查找第一个大于或等于 x 的元素位置,横线处应填写( )。
def lowerBound(a, x):
l = 0
r = len(a)
while l < r:
mid = l + (r - l) // 2
if a[mid] >= x:
________________ # 在此处填入代码
else:
l = mid + 1
return l
r = mid + 1
r = mid - 1
r = mid
l = mid
有若干根木头,长度存于 wood。每切一刀可以把一段木头分成两段。函数 check(wood, K, x) 返回:用不超过 K 刀,能否使所有木段长度都不超过 x。下面代码使用二分答案查找最小可行的 x,横线处应填( )。
def binary_cut(wood, K):
l = 1
r = 0
for length in wood:
r = max(r, length)
while l < r:
mid = l + (r - l) // 2
if check(wood, K, mid):
________________ # 在此处填入代码
else:
l = mid + 1
return l
r = mid + 1
r = mid
l = mid
r = mid - 1
