思路:
1) 先判断 0<m<=n <= size,不满足直接返回原来的 头节点
2) 先找到 m的前一个节点 m_pre 和 n的后一个节点 n_pos. 把反转的部分反转之后。连接m_pre 和 n_pos.
3) 如果m_pre为null,说明反转的部分包含 头结点,则返回新的头结点,也就是 n. 如果m_pre不为null,则返回旧的头结点。
# class ListNode: # def __init__(self, x): # self.val = x # self.next = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param head ListNode类 # @param m int整型 # @param n int整型 # @return ListNode类 # class Solution: def reverseBetween(self , head: ListNode, m: int, n: int) -> ListNode: # write code here if m <0 or m>n or n >1000: return head current_len = 0 # 当前位置 node = head m_pre = None n_pos = None while node is not None: current_len += 1 if current_len == m-1: # 判断当前 节点是不是 m_pre节点 m_pre = node if current_len == n + 1: # 判断当前节点 是不是 n_pre节点 n_pos = node break node = node.next # 用node变量保存开始反转的节点。 if m_pre is None: # 如果m_pre 是 None,说明 m是头结点, node = head else: # m_pre不是None, m不是头节点 ,开始反转的节点是m_pre.next node = m_pre.next # node 是 循环的前一个节点 变量 # node2 是当前节点 # next 是当前节点的下一个节点, 每次循环更新这三个变量 # 从下一个节点开始,node是前一个节点。 node2 = node.next # 3 。 node.next = n_pos # 开始反转的节点的下一个 节点连接 n_pos , 2 > 5 next = None # next变量 while node2 != n_pos: # 遍历到 n_pos节点 next = node2.next # 保存当前node的next node2.next = node # 将当前节点的下一个改为 前一个节点。 node = node2 # 当前节点 更新为 前一个节点 node2 = next # 更新当前节点 if m_pre is not None: # 不是 从头节点开始。 返回原来的头节点 head . 把 1 > 4 m_pre.next = node # 反转结束后。 node已经变成 4 了。 return head return node
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix