092._reverse_linked_list_ii.md 1.2 KB
Newer Older
K
KEQI HUANG 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
###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 操作