# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # @param n int整型 # @param m int整型 # @return int整型 """ 解决思路:(1) 使用getListNode创建环形链表 (2) 使用get_size获取环形链表长度初始值size (3) 每执行循环一次则减少size的值1 (4)最后当size = 1时,环形链表只剩一个节点,输出该节点的值即可 """ class ListNode: def __init__(self, val) -> None: self.val = val self.next = None class Solution: def LastRemaining_Solution(self, n: int, m: int) -> int: # write code here head = self.getListNode(n) cur = head pre = None # 获取环形链表的长度初始值 size = self.get_size(cur) # 当链表长度大于1时执行循环 while size > 1: count = 0 # 使用count记录m-1步时,cur和pre的位置 while count < m - 1: pre = cur cur = cur.next count += 1 # 退出循环执行删除节点操作:将pre的next指向cur的next, pre.next = cur.next # 此时cur的值需要重新定义到删除值的下一个节点,即pre.next cur = pre.next # 环形链表伪长度-1 size -= 1 return cur.val def getListNode(self, n): # 创建环形链表 head = ListNode(-1) cur = head for i in range(n): cur.next = ListNode(i) cur = cur.next cur.next = head.next return head.next def get_size(self, head): # 获取环形链表的伪长度 lst = [] cur = head while cur: if cur.val not in lst: lst.append(cur.val) cur = cur.next else: break return len(lst)