线性表11|单链表小结:腾讯面试题 – 数据结构和算法16
线性表11|单链表小结:腾讯面试题
让编程改变世界
Change the world by program
静态链表的删除操作
我们的故事还没结束,小C看到小A和2B这样非法的勾当,内心觉得很不爽,一句话也不说就离开了队伍。。。。。。
我们先在图上实践一下,然后研究代码:
静态链表的删除操作
代码:ListDelete.c
静态链表优缺点总结
优点:
在插入和删除操作时,只需要修改游标,不需要移动元素,从而改进了在顺序存储结构中的插入和删除操作需要移动大量元素的缺点。
缺点:
没有解决连续存储分配(数组)带来的表长难以确定的问题。
失去了顺序存储结构随机存取的特性。
总的来说,静态链表其实是为了给没有指针的编程语言设计的一种实现单链表功能的方法。
尽管我们可以用单链表就不用静态链表了,但这样的思考方式是非常巧妙的,应该理解其思想,以备不时之需。
单链表小结:腾讯面试题
题目:快速找到未知长度单链表的中间节点。
既然是面试题就一定有普通方法和高级方法,而高级方法无疑会让面试官大大加分!
普通的方法很简单,首先遍历一遍单链表以确定单链表的长度L。然后再次从头节点出发循环L/2次找到单链表的中间节点。
算法复杂度为:O(L+L/2)=O(3L/2)。
能否再优化一下这个时间复杂度呢?
有一个很巧妙的方法:利用快慢指针!
利用快慢指针原理:设置两个指针search、mid都指向单链表的头节点。其中 search的移动速度是mid的2倍。当*search指向末尾节点的时候,mid正好就在中间了。这也是标尺的思想。
我们来看下代码实现:GetMidNode.c
课后作业:写一个完整的程序,实现随机生成20个元素的链表(尾插法或头插法任意),用我们刚才学到的方法快速查找中间结点的值并显示。
程序演示:GetMidNode2.exe
备用视频下载
技术, IT技术, 数据结构和算法, 单链表
风险提示及免责条款
市场有风险,投资需谨慎。本文不构成个人投资建议,也未考虑到个别用户特殊的投资目标、财务状况或需要。用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!