题解 | #链表内指定区间反转#
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
# 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
dummy_head = ListNode(-1)
dummy_head.next = head
pointer = dummy_head
for i in range(m-1):
pointer = pointer.next
reverse_pre = pointer
reverse_tail = pointer.next
pre = reverse_tail
cur = reverse_tail.next
while m < n:
temp = cur.next
cur.next = pre
pre = cur
cur = temp
m += 1
reverse_pre.next = pre
reverse_tail.next = cur
return dummy_head.next
整体思路:
- 使用一个dummy_head来保证head也方便统一处理
- 先找到第m-1个节点的位置进行记录,这个节点将会在反转后再链接到反转链表区间的新头节点上
- 记录第m个节点reverse_tail,他将在反转后成为这段区间的尾结点
- 初始化pre=reverse_tail,cur=第m+1个节点的位置,然后背诵反转链表的模板
- 将之前保存的m-1个节点链接到新的头,
- reverse_tail链接到后续的正常节点cur
