思路:

  1. 先将指针p移动到第m个节点的前一个节点,即p指向第m-1个节点;
  2. 定义指针q指向第m个节点,定义指针pre指向p,定义指针next;
  3. 循环遍历第m到第n个节点,将每个节点的next指针指向前一个节点,即实现反转操作;
  4. 将pre节点的next指针指向q节点,将p节点的next指针指向第n个节点,即完成区间反转。

代码实现:

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

def reverseBetween(head: ListNode, m: int, n: int) -> ListNode:
    if not head or not head.next or m == n:
        return head

    # 先将指针p移动到第m个节点的前一个节点,即p指向第m-1个节点
    dummy = ListNode(0)
    dummy.next = head
    p = dummy
    for i in range(m-1):
        p = p.next

    # 定义指针q指向第m个节点,定义指针pre指向p
    q = p.next
    pre = p

    # 循环遍历第m到第n个节点,将每个节点的next指针指向前一个节点,即实现反转操作
    for i in range(m, n+1):
        next = q.next
        q.next = pre
        pre = q
        q = next

    # 将pre节点的next指针指向q节点,将p节点的next指针指向第n个节点,即完成区间反转
    p.next.next = q
    p.next = pre

    return dummy.next
将一个节点数为size链表m位置到n位置之间的区间反转要求时间复杂度为On空间复杂度为O1

原文地址: https://www.cveoy.top/t/topic/bnqj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录