166 - 92 反转链表2
题目
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明: 1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL
解答
递归
继续研究大佬的解法
他的思路是拆解问题。反转链表的一部分=>从头反转到n=>反转全部链表。
反转全部链表,即反转链表1。记录下最后节点之后的节点,即可反转到n。reverseN()。
然后不断递归reverseBetween(),就能得到结果了。
class Solution:
def reverseBetween(self, head: ListNode, m: int, n: int) -> ListNode:
self.successor = None
def reverseN(head, n):
if n == 1:
self.successor = head.next
return head
last = reverseN(head.next, n-1)
head.next.next = head
head.next = self.successor
return last
if m == 1:
return reverseN(head, n)
head.next = Solution.reverseBetween(self, head.next, m-1, n-1)
return headRuntime: 32 ms, faster than 77.39% of Python3 online submissions for Reverse Linked List II.
Memory Usage: 13.2 MB, less than 33.33% of Python3 online submissions for Reverse Linked List II.
Runtime: 64 ms, faster than 13.75% of JavaScript online submissions for Reverse Linked List II.
Memory Usage: 33.9 MB, less than 42.86% of JavaScript online submissions for Reverse Linked List II.
迭代
Runtime: 32 ms, faster than 77.39% of Python3 online submissions for Reverse Linked List II.
Memory Usage: 12.8 MB, less than 100.00% of Python3 online submissions for Reverse Linked List II.

Last updated
Was this helpful?