“之前喜欢刷抖音,后来因为学习卸掉了,最近又迷上了小红书,真觉得自己的碎片时间,就是粉末,根本不想也不会捡起来,有尝试在碎片时间看书就是Python的书,我也很喜欢,但是总没有小短视频能带来短暂的娱乐,感觉自己早晚被短视频害死。”——努力成为程序员的耿耿(2021/10/30)
题目反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
(LeetCode原题)
思考: 对数据结构了解比较好的,能考虑到栈的方法,利用先进后出的方法,遍历整个链表,然后把每一个入栈操作,知道指针的下一个为空的时候就出栈,这样会有后进先出的结构就能达到反转的方法,但是相当于又建了一个栈表,这样空间复杂度会高一点。
其次想到栈表,就要想到递归,能用栈表的一定可以递归,只不过递归的路线很难找罢了,递归唯一的好处就是空间复杂度低。下面就代码讲解,主要学习递归思想。
void reverse(ListNode head){
if(head==NULL || head->next==NULL){
return head;
}
ListNode p=reverse(head->next)
head->next->next=head;
head->next=NULL;
return p;
}
首先第一个行就是一直遍历找到最后一个节点,然后最后一次递归结束,返回上一层递归中,现在p是head是4,然后让head->next->next=head;就是让5的指针指向4,再让4指向NULL ,返回是p是head是3 ,继续让4指向3,3指向空,这样一直递归知道1指向空就结束了。
这个方法很难理解不妨画个图
这样就很好理解了,明天再写栈表的方法,先吸收这个,递归思想真的很不好理解。



