题解 | #链表内指定区间反转O(size*(n-m))#

链表内指定区间反转

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:

        # 定义空头节点,避免特殊逻辑
        top = ListNode(1001)
        top.next = head
        
        # 寻找开始反转节点start、开始反转节点前一个节点pre
        pre = top
        idx1 = 0
        while idx1 < m - 1:
            pre = pre.next
            idx1 += 1
        start = pre.next
        pre.next = None

        # 寻找结束反转节点end、结束反转后一个节点post
        end = start
        idx1 = 0
        while idx1 < n - m:
            end = end.next
            idx1 += 1
        post = end.next
        end.next = None

        # start-end之间的反转,返回反转后的[head , tail]
        reverseResult = self.reverse(start)   

        # 开始拼接三段
        pre.next = reverseResult[0]
        reverseResult[1].next = post

        return top.next   


        

    def reverse(self , head: ListNode) -> List:
        if head.next == None:
            return [head , head]
        nxtReverseResult = self.reverse(head.next)
        head.next = None
        nxtReverseResult[1].next = head
        return [nxtReverseResult[0] , head]

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 11:00
点赞 评论 收藏
分享
不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
小鹏、大疆、米哈游、MinMax小鹏上午投的下午就约面,进度未免也太快了
蛇年行大运fff:哥们 盗贴有意思吗,我发xhs上的给你搬过来了😅😅😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务