题解 | #链表内指定区间反转#
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
import re # 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 head is None: return head dummy = ListNode(0) dummy.next = head prev = dummy for _ in range(m-1): prev = prev.next cur = prev.next for _ in range(n-m): next = cur.next cur.next = next.next next.next = prev.next prev.next = next return dummy.next
对于链表内指定区间反转,我们首先还是去考虑head节点是否为空,若为空,则直接返回head
这里我们设置了一个虚拟的头节点,方便我们操作,定义perv指针指向dummy。
我们要找到第m个节点,我们就要找到第m-1个节点的位置。
对与range(start,stop)的取值为start---(stop-1)
链表从0开始编号,我们要找m-1的位置在链表中的编号就是m-2所以range(0,m-1)
我们找到m-1后,指向m-1的下一个,我们就找到了第m个节点的位置。
再次循环,把m到n的所有链表进行反转
最后返回dummy.next,去掉头节点的链表