这个题之前用比较垃圾的方法做的,就是最容易想到的那种,所以没写。然后今天看到了用回溯的解法,哇!!!爱了爱了,回溯真的强。这种优美的解法,真的应该背会。
废话不多说,看题看代码。
题目:
92. 反转链表 II
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
代码:
class Solution(object):
def reverseBetween(self, head, m, n):
"""
:type head: ListNode
:type m: int
:type n: int
:rtype: ListNode
"""
if m==1:
return self.reverse(head, n)
head.next = self.reverseBetween(head.next, m-1, n-1)
return head
def reverse(self, head, n):
if n==1:
self.part2 = head.next
return head
last = self.reverse(head.next, n-1)
head.next.next = head
head.next = self.part2
return last
好了。真的该背会,这种题。