翻转链表reverse linked list:全部
[抄题]:
[暴力解法]:
时间分析:
空间分析:
[优化后]:
时间分析:
空间分析:
[奇葩输出条件]:
[奇葩corner case]:
[思维问题]:
[英文数据结构或算法,为什么不用别的数据结构或算法]:
[一句话思路]:
背诵的递归写法
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
https://www.geeksforgeeks.org/reverse-a-linked-list/
1)将列表分为两部分-第一个节点和
链接列表的其余部分。
2)呼叫反向链接列表的其余部分。
3)首先将休息联系起来。
4)固定头指针
[一刷]:
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
[复杂度]:Time complexity: O() Space complexity: O()
[算法思想:迭代/递归]:
[关键模板化代码]:
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
[代码风格] :
[是否头一次写此类driver funcion的代码] :
[潜台词] :
class Solution { public ListNode reverseList(ListNode head) { //递归的出口 if (head == null || head.next == null) { return head; } //递归的步骤,剩下的节点全都继续递归。 ListNode rest = reverseList(head.next); //处理下一个节点,连接回来 head.next.next = head; //处理这个节点,别人指着它,它不指向任何人了 head.next = null; return rest; } }