fucking algorithm - 递归反转链表(仅适合装13)

真的考了~ 搜狐上来手撕两道代码题。第一道就是这个。

 

迭代写法可以,但是很多注意细节。

递归比较简洁优美。适合装逼,但不适合考试,因为空间复杂度是O(n)。

 

1. 递归整个链表:https://leetcode-cn.com/problems/reverse-linked-list/

-> 判断递归函数的意义

-> 确定 base case

-> 不要陷入递归!

 

2. 反转链表前N个结点 

def reverseN(head, n):

     if n == 1:

    successor = head.next

    return head 

   p = reverseN(head.next, n - 1)

   head.next.next = head

     head.next = successor

   return p

 

 

3. 反转 m-n 结点

将函数理解成以 head 为初始结点,相对 head 位置为 m 到 n 的翻转。

所以对于 head.next,则相对 head.next 位置为 m-1 到 n-1 的翻转。。。。以此类推。

 

 

对于不需要翻转的,只需要返回自身!否则会一直前进到翻转的位置。

 

 

其实这题,大不了先 for loop 到第 m 个位置,再翻转即可。转化成翻转  topk 的问题。

 

posted @ 2021-04-12 22:10  nuo-o  阅读(96)  评论(0编辑  收藏  举报