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
    
  • 相关阅读:
    写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)
    工作1个月+1个星期
    矫正骨盆前倾!平坦小腹!解决腰痛!
    《非暴力沟通》
    了不起的盖茨比
    X战警系列
    Docker常用命令大全
    学习笔记12
    电子公文传输系统1个人贡献
    实验四 Web服务器2
  • 原文地址:https://www.cnblogs.com/panweiwei/p/12857070.html
Copyright © 2011-2022 走看看