题解 | #链表内指定区间反转#
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
from sys import hexversion from pickle import NONE # 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: if head == None: return None #建立头节点,防止从第一位置开始倒序 res= ListNode(-1) res.next = head pre = res cur = head #找到M节点 for i in range(1,m): pre = cur cur = cur.next #遍历从M到N的位置,在区间内反转链表 for i in range(m,n): temp = cur.next cur.next = temp.next temp.next = pre.next pre.next = temp return res.next # write code here
需要先理解反转链表的逻辑,再来理解这个题~
这道题是需要在区间内反转链表,那既然是区间,就会有左和右,所以还是得依靠双指针来查找对应的节点
思路是首先找到第一个节点,规避一下极端情况,就是从第一个位置开始反转,所以需要先定义一个头节点
然后使用for循环来寻找m
找到第一个节点m后,开始进入新的循环(m.n)区间内,执行原来反转链表的操作
反转链表:
前节点(pre)、当前节点(cur)、临时节点(temp)
先将当前节点的下一个节点值存在temp中
将当前节点的下一个节点指向pre
将pre移动至cur(pre已经到了链表的最后)
将cur指向temp(此时cur已经到了链表的中间)