线性表11|单链表小结:腾讯面试题
让编程改变世界
Change the world by program
静态链表的删除操作
我们的故事还没结束,小C看到小A和2B这样非法的勾当,内心觉得很不爽,一句话也不说就离开了队伍。。。。。。
我们先在图上实践一下,然后研究代码:
[caption id="attachment_1938" align="alignnone" width="580"]
![静态链表的删除操作](http://blog.fishc.com/wp-content/uploads/2012/11/图片14.png)
静态链表的删除操作[/caption]
代码:ListDelete.c
静态链表优缺点总结
优点:
在插入和删除操作时,只需要修改游标,不需要移动元素,从而改进了在顺序存储结构中的插入和删除操作需要移动大量元素的缺点。
缺点:
没有解决连续存储分配(数组)带来的表长难以确定的问题。
失去了顺序存储结构随机存取的特性。
总的来说,静态链表其实是为了给没有指针的编程语言设计的一种实现单链表功能的方法。
尽管我们可以用单链表就不用静态链表了,但这样的思考方式是非常巧妙的,应该理解其思想,以备不时之需。
单链表小结:腾讯面试题
题目:快速找到未知长度单链表的中间节点。
既然是面试题就一定有普通方法和高级方法,而高级方法无疑会让面试官大大加分!
普通的方法很简单,首先遍历一遍单链表以确定单链表的长度L。然后再次从头节点出发循环L/2次找到单链表的中间节点。
算法复杂度为:O(L+L/2)=O(3L/2)。
能否再优化一下这个时间复杂度呢?
有一个很巧妙的方法:利用快慢指针!
利用快慢指针原理:设置两个指针*search、*mid都指向单链表的头节点。其中* search的移动速度是*mid的2倍。当*search指向末尾节点的时候,mid正好就在中间了。这也是标尺的思想。
我们来看下代码实现:
GetMidNode.c
课后作业:写一个完整的程序,实现随机生成20个元素的链表(尾插法或头插法任意),用我们刚才学到的方法快速查找中间结点的值并显示。
程序演示:
GetMidNode2.exe
[buy]
获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://kuai.xunlei.com/d/BdsUAwoJVQCGkxNRe5b']视频下载[/Downlink]
[Downlink href='http://urlxf.qq.com/?eAZNreq']备胎下载[/Downlink]