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

链表内指定区间反转

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类
#
#   时间复杂度O(n), 空间复杂度O(1)
class Solution:
    def reverseBetween(self , head: ListNode, m: int, n: int) -> ListNode:
        # write code here
        if not head:
            return head
        else:
            root, index = head, 0
            #   m, n位置的节点
            m_node, n_node = None, None
            #   m-1, n+1位置的节点
            start, end = None, None
            #   临时节点
            p, q = None, None
            while head:
                index += 1
                if m <= index and index <= n:
                    #   逆转链表
                    if m != n:
                        if index == m:
                            p = head
                            m_node = head
                            head = head.next
                        else:
                            q = head.next
                            head.next = p
                            if index == n:
                                n_node = head
                                n_node.next = p
                            p = head
                            head = q
                    else:
                        #   处理特殊的m=n的情况,即无需逆转
                        m_node = head
                        n_node = head
                        head = head.next
                elif index == m - 1:
                    #   划定起始节点,即记录m-1的位置
                    start = head
                    head = head.next
                elif index == n + 1:
                    #   划定结束节点,即记录n+1的位置
                    end = head
                    head = head.next
                else:
                    #   向后遍历
                    head = head.next
            
            #   串联链表
            if n == index:
                m_node.next = None
            else:
                m_node.next = end
            if m == 1:
                root = n_node
            else:
                start.next = n_node
                
            return root


                
                    

                

            

全部评论

相关推荐

04-01 16:02
已编辑
武汉工程大学 Java
牛客98843461...:处女面??我还种马面渣男面处男面呢
点赞 评论 收藏
分享
个人背景:学院二本计科专业&nbsp;大二开始实习个人经历:安克创新&nbsp;、理想汽车、字节跳动碎碎念:我做事只有三分钟热度。看到进了大厂的同学,我会羡慕,也会跟着努力上进;但遇到好看的小说,我又会放下手头的事沉迷其中,之前的坚持也就中断了。我有些自卑,总觉得自己学历和外貌都不够好。之前偶然在网上受到关注,我就喜欢上了上网,因为这里有很多人认可我。但我也很在意别人的评价,偶尔看到嘲讽的言论,会触发我的自卑情绪,让我感到愤怒。有时候我会强硬地回怼,有时候又会懦弱地选择无视。我也有虚荣心。不管是拿到安克、理想还是字节的机会,我在分享的时候都会带着这份心思。我会特意强调自己学历不好,是为了衬托出过程的艰难,以此显得自己更厉害。我知道,人往往会炫耀自己缺少的东西,来掩盖内心的空洞。我总想着走捷径,不太喜欢踏踏实实地做事。找实习的时候,我花了更多时间在研究面试技巧上,而不是提升专业能力。我会反复听面试录音分析技巧,看面试教程学习怎么和不同的面试官沟通,还会每天自言自语练习语言表达,同学都觉得我有点奇怪。我的实习生涯里,侥幸和运气占了很大一部分。我总在想,如果有一天我失去了这份幸运,这些特质可能会让我一蹶不振。ps:&nbsp;很多人会问我学习路线和经验&nbsp;但是就像我上面说的&nbsp;我的实习过程靠的很多是关键节点的运气&nbsp;技术上面我可能不如很多人&nbsp;&nbsp;所以请大家理性求助和理性参考我的回答&nbsp;附上我的投递记录
我的offer在哪里...:从去年看到现在,飞升哥就是榜样
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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