zoukankan      html  css  js  c++  java
  • 92. 反转链表 II



    方法一:

    class Solution(object):
        def reverseBetween(self, head, m, n):
            """
            :type head: ListNode
            :type m: int
            :type n: int
            :rtype: ListNode
            """
            # 边界处理
            if not head or not head.next or m == n:
                return head
            # 返回值
            ans = ListNode(0)
            ans.next = head
            # 记录第m-1个节点
            pre = ListNode(0)
            for i in range(1, m):
                pre = head
                head = head.next
            # 反转部分的首节点
            prehead = ListNode(0)
            # 记录第n个节点
            pretail = head
            # 开始反转从m到n个节点
            for j in range(m, n + 1):
                temp = head.next
                head.next = prehead
                prehead = head
                head = temp
            # 若不是从首节点开始反转,则拼接前部分未反转的节点
            if m != 1:
                pre.next = prehead
            else:
                ans.next = prehead
            # 若n小于原链表长度,则拼接后部分未反转的节点
            if head:
                pretail.next = head
            return ans.next
    

    方法二:

    class Solution(object):
        def reverseBetween(self, head, m, n):
            """
            :type head: ListNode
            :type m: int
            :type n: int
            :rtype: ListNode
            """
            # 边界处理
            if not head or not head.next or m == n:
                return head
            prehead, cur = None, head
            while m > 1:
                prehead = cur
                cur = cur.next
                m -= 1
                n -= 1
            # one和two分别是遍历指针和前部分不用反转的最后一个节点
            one, two = cur, prehead
            while n:
                temp = cur.next
                cur.next = prehead
                prehead = cur
                cur = temp
                n -= 1
            if two:
                two.next = prehead
            else:
                head = prehead
            one.next = cur
            return head
    
  • 相关阅读:
    (Vedctor经典)A
    C++ map用法
    (约瑟夫应用)5.4.1 Roman Roulette
    部分题集代码
    随机生成数
    如何在AutoCAD中实现鼠标双击事件
    浅谈JS之Error对象
    自定义微信小程序swiper轮播图面板指示点的样式
    物理像素与逻辑像素相关概念
    微信小程序中padding-right和margin-right无效
  • 原文地址:https://www.cnblogs.com/panweiwei/p/12857070.html
Copyright © 2011-2022 走看看