将一个节点数为size链表m位置到n位置之间的区间反转要求时间复杂度为On空间复杂度为O1
思路:
- 先将指针p移动到第m个节点的前一个节点,即p指向第m-1个节点;
- 定义指针q指向第m个节点,定义指针pre指向p,定义指针next;
- 循环遍历第m到第n个节点,将每个节点的next指针指向前一个节点,即实现反转操作;
- 将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
原文地址: https://www.cveoy.top/t/topic/bnqj 著作权归作者所有。请勿转载和采集!