题解 | #链表内指定区间反转#
链表内指定区间反转
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