栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

每日算法篇(9)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

每日算法篇(9)

每日算法篇-LeetCode

“之前喜欢刷抖音,后来因为学习卸掉了,最近又迷上了小红书,真觉得自己的碎片时间,就是粉末,根本不想也不会捡起来,有尝试在碎片时间看书就是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指向空就结束了。
这个方法很难理解不妨画个图

这样就很好理解了,明天再写栈表的方法,先吸收这个,递归思想真的很不好理解。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/357229.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号