约瑟夫环-哪个牛咖来给写个注释,实在是不会讲解,

def findStart(LCList,k): #查找第一轮的起点k
p = manGroup.rear.next
i = 1
while True:
if i == k:
break
p=p.next
i=i+1
##### Fill in Your Code(2) #####
return p

def findNext(LCList,newStart,m): #从newStart开始查找第m - 1个元素,返回指向该结点的指针
p = newStart
i = 1
while True:
p.elem.color = DarkOrange
p.elem.draw()
pygame.display.update() #使部分内容显示到屏幕上
pygame.time.delay(500) #暂停程序一段时间(毫秒数)
if i == m - 1:
break
p=p.next
i+=1
##### Fill in Your Code(2) #####
return p
def delNode(LCList,newObj): #删除newObj后面的一个结点,返回下一轮游戏的新的起始结点
p = newObj
obj = p.next
if obj == LCList.rear:#删除的是最末端的一个结点
LCList.rear=p
# ##### Fill in Your Code(1) #####

if LCList.getLength() == 1:   #只剩一个结点的情况(删除剩余的唯一一个结点)
    LCList.rear=None#(特殊空值)

# ##### Fill in Your Code(1) #####
p.next=obj.next
p=p.next


##### Fill in Your Code(2) #####    #删除p之后的一个结点,并将p向后移动至下一个结点
obj.elem.color = red
obj.elem.draw()
pygame.display.update()
pygame.time.delay(500)
info = font.render(obj.elem.label, True, red)
infoGroup.append(info)
pygame.time.delay(500)
initScreen()
return p

def JosephusL(n, k, m): #n:总人数;k:第一轮的起点;m:每一轮游戏的长度
global info_num
newStart = findStart(manGroup,k)
while not manGroup.isEmpty():
obj = findNext(manGroup,newStart,m)
newStart = delNode(manGroup,obj)
return

while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if manGroup.rear:
JosephusL(n, k, m)
print('game over')

你看下这个吧,单循环链表之约瑟夫环详解
这个博客文章讲解的不错


如有帮助,望采纳!谢谢!