腾讯的面试题:找出未知单链表中点元素?
俩种方法:
第一种:全部遍历算出总长度为length;再遍历length/2个元素。时间复杂度为O(3N/2)
第二种:设置快慢指针。search速度为2,middle速度为1。当search完一遍时,middle正好 为中点元素。此时时间复杂度为O(N)。
其实还有第三种:若在单链表中设置len属性记录单链表长度,那么直接遍历N/2即可时间复杂 度为O(N/2)。
代码如下:
package dataStructtion.linear; /** * 找出未知单链表中点元素 * @author xiucai */ public class MiddleSingleLinked{ /** * 先求长度n * 再求n/2位置的元素 * 时间复杂度为:O(n+n/2)=O(3N/2) * @param list * @return */ public static<T> T getMiddle1(SingleLinkedList<T> list){ int count=0; Node<T> node=list.head; while(node.next!=null){ count++; node=node.next; } node=list.head; int middle=count%2==0?count/2:1+count/2; for(int i=0;i<middle;i++){ node=node.next; } return (T)node.data; } /** * 快慢指针,时间复杂度为O(N/2+N/2)=O(N) * @param list * @return */ public static<T> T getMiddle2(SingleLinkedList<T> list){ Node<T> middle=list.head;//记录中点数,速度为1 Node<T> search=list.head;//速度为2 while(search.next!=null){ //偶数情况下 if(search.next.next!=null){ search=search.next.next; middle=middle.next; } //奇数情况下 else { search=search.next; middle=middle.next; } } return (T)middle.data; } /** * 若在单链表中设置len属性记录单链表长度,那么直接遍历N/2即可 * 时间复杂度为O(N/2) * @param list * @return */ public static<T> T getMiddle3(SingleLinkedList<T> list){ int len=list.length(); int middle=len%2==0?len/2:1+len/2; Node<T> node=list.head; for(int i=0;i<middle;i++){ node=node.next; } return (T)node.data; } /** * 测试算法 * @param args */ public static void main(String[] args) { SingleLinkedList<String> list=new SingleLinkedList<String>(); list.append("a"); list.append("b"); list.append("c"); list.append("d"); System.out.println(list); System.out.println(getMiddle2(list)); list.append("e"); System.out.println(list); System.out.println(getMiddle2(list)); } }
相关推荐
前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; ...
大数据面试题V3.0完成了。共523道题,679页,46w+字,来源于牛客870+篇面经。 主要分为以下几部分: Hadoop面试题:100道 Zookeeper面试题:21道 Hive面试题:47道 Flume面试题:11道 Kafka面试题:59到 HBase面试题...
大数据面试题V3.0完成了。共523道题,679页,46w+字,来源于牛客870+篇面经。 主要分为以下几部分: Hadoop面试题:100道 Zookeeper面试题:21道 Hive面试题:47道 Flume面试题:11道 Kafka面试题:59到 HBase面试题...
面试题15:在二元树中找出和为某一值的所有路径 第11章 排序 11.1 插入排序 面试题1:编码实现直接插入排序 面试题2:编码实现希尔(Shell)排序 11.2 交换排序 面试题3:编码实现冒泡排序 面试题4:编码实现快速...
经典面试题:最长公共子序列.html
前端面试题:前端开发面试题大全,涵盖了HTML、CSS、JavaScript、前端框架和工具等方面; 前端面试题:前端开发面试题大全,涵盖了HTML、CSS、JavaScript、前端框架和工具等方面; 前端面试题:前端开发面试题大全,...
Vue面试题:.txt
文章目录求单链表中有效节点的个数查找单链表中倒数第k个节点【新浪面试题】单链表的反转【腾讯面试题】从尾到头打印单链表【百度面试题,要求方式1:反向遍历。方式2:Stack栈】 单链表的常见面试题有如下: 1.求...
医疗卫生面试真题:卫生类典型面试题汇总及答案(23)借鉴.pdf
http网络面试题:.md
2. **找出单链表的倒数第四个元素**:这道题目要求找到链表中倒数第k个元素,可以利用双指针技巧,让一个指针先向前移动k-1步,然后两个指针同步移动,当先移动的指针到达链表尾部时,另一个指针所指向的就是倒数第k...
- 面试题:解释Java中的三元运算符,并给出一个实际应用场景。 - 详述if-else、switch-case、for、while等控制结构的使用。 4. **数组与集合框架** - 阐述一维、多维数组的创建和操作。 - 面试题:对比...
Vue面试题:让你在面试中游刃有余.md
"2021最新大厂AI面试题:Q3版107题(含答案及解析).pdf" 这份面试题目涵盖了多个方面的AI知识点,包括机器学习、深度学习、自然语言处理等领域。下面是从这份面试题目中提取的相关知识点: 机器学习 1. 逻辑回归...
面试题:第一阶段.pages
01_JavaSE面试题:自增变量
这些问题通常需要通过递归或者迭代的方法来解决,并且在面试中要求应聘者能够熟练地写出代码来。 整体来看,这些面试题覆盖了机器学习和深度学习中的核心概念和技术细节,考察应聘者在算法理论、模型训练、性能优化...
02_JavaSE面试题:单例设计模式
05_JavaSE面试题:递归与迭代
Java面试题:Java基础方面的题型,包括问题和答案哦