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

全部评论

相关推荐

12-27 22:14
门头沟学院 Java
点赞 评论 收藏
分享
专业嗎喽:个人信息名字太大,合到电话邮箱那一栏就行,有党员写过党,剩下其他全删,站空太大了 把实习经历丰富,放最前面,然后是个人评价,技能之类的,然后是学校信息。项目经历最后面,可以就选一个自己擅长的。 现在是学校不是92就扣分的,没必要放前面。 然后现在看重实习经历>竞赛经历(校园经历)>课程项目经历
点赞 评论 收藏
分享
用微笑面对困难:你出于礼貌叫了人一声大姐,大姐很欣慰,她真把你当老弟
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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