题解 | #链表内指定区间反转|时间复杂度O('n')#

链表内指定区间反转

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:
        if m == n:
            return head
        
        # 定义空头结点,避免特殊判断
        top = ListNode(1001)

        # 定义开始反转之前的位置
        startPre = top
        startPre.next = head
        # 确定开始反转的位置、开始反转之前的位置
        idx1 = m
        while idx1 > 1 :
            startPre = startPre.next
            idx1 -= 1
        start = startPre.next

        # 开始反转
        pre = None
        cur = start
        idx2 = n - m + 1
        while idx2 > 0 :
            nxt = cur.next
            cur.next = pre
            pre = cur
            cur = nxt
            idx2 -= 1
            
        # 确定结束反转的位置、结束反转之后的位置
        end = pre
        endAfter = cur

        # 拼接三段链表(反转前、反转、反转后)
        start.next = endAfter
        startPre.next = end

        # 定义的空头结点的next就是真正的头结点
        return top.next

全部评论

相关推荐

链接
海梨花:我说话难听,你这简历跟没写没啥区别,搜搜别人的简历,用心写,不要随随便便就结束了
点赞 评论 收藏
分享
11-23 15:14
中原工学院 Java
程序员花海_:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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