Skip to content

092 reverse linked list ii

92. Reverse Linked List II

题目: https://leetcode.com/problems/reverse-linked-list-ii/

难度: Medium

跟 reverse linked list一样

思路: 找到 第 m 个node,然后开始reverse到第n个node,然后再把它们和原本的list连接起来

AC 代码

class Solution(object):
    def reverseBetween(self, head, m, n):
        """
        :type head: ListNode
        :type m: int
        :type n: int
        :rtype: ListNode
        """
        # m == n, not reverse
        if m == n : return head

        dummy = ListNode(-1)
        dummy.next = head

        mbefore = dummy
        cnt = 1

        while mbefore and cnt < m:
            mbefore = mbefore.next
            cnt += 1

        prev = None
        cur = mbefore.next
        tail1 = mbefore.next


        while cnt <= n :
            nxt = cur.next
            cur.next = prev
            prev = cur
            cur = nxt
            cnt += 1



        mbefore.next = prev
        tail1.next = cur

        return dummy.next 

看了一下别人的代码,又比我写的好嘛,因为是保证m和n有效,用的是for循环先找到 m node:

for _ in range(m-1):
    ....

for _ in range(n-m):
    reverse 操作

我们一直在努力

apachecn/AiLearning

【布客】中文翻译组