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

全部评论

相关推荐

点赞 评论 收藏
分享
程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务