题解 | #链表内指定区间反转#

链表内指定区间反转

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

整体思路:

  1. 使用一个dummy_head来保证head也方便统一处理
  2. 先找到第m-1个节点的位置进行记录,这个节点将会在反转后再链接到反转链表区间的新头节点上
  3. 记录第m个节点reverse_tail,他将在反转后成为这段区间的尾结点
  4. 初始化pre=reverse_tail,cur=第m+1个节点的位置,然后背诵反转链表的模板
  5. 将之前保存的m-1个节点链接到新的头,
  6. reverse_tail链接到后续的正常节点cur
全部评论

相关推荐

02-05 08:18
四川大学 Java
在思考的熊熊很讨厌吃香菜:不是,我门头沟学院呢?这都没排上?
点赞 评论 收藏
分享
饼子吃到撑:海面这个是,投了一般都给的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务