考点介绍:
链表是一种逻辑简单的、实用的数据结构,几乎被所有程序设计语言支持。单链表的操作算法是笔试面试中较为常见的题目。
本期分享的测试算法考点之链表算法,分为试题、文章以及视频三部分。
答案详情解析和文章内容可扫下方二维码或链接即可查看!
一、考点题目
1. 一个长度为n的单向链表,用O(1) 空间复杂度来实现倒转输出,使用最低时间复杂度
正确答案:
单向链表,直接设结点 Node head; 要倒转就需要重置链接,设记忆结点 Node p
空间复杂度为O(1) ,就是不能使用新的空间-》一边遍历,另一边不断加结点
只能通过指针的指向重置来完成反转,How??
2. 如果单链表中是有环,请找到环的入口点
正确答案:找环的入口点,就是找到入口点是链表的第几个结点,设这个结点q是第a个,
3. 如何判断两个单链表是否相交 ?
正确答案:法1
对链表1中的每个节点p1,判断链表2中是否有一个节点p2指向p1
loop:p1从head1到最后一个节点
loop:p2从head2到最后一个节点
if(p2是否指向p1)
相交
break
时间复杂度:O(list1.length * list2.length)
空间复杂度:O(1)
(答案点击下方链接或者扫海报二维码查看哦)
二、考点文章
1. 判断两个单链表是否相交及找到第一个交点
解这道题之前,我们需要首先明确一个概念:
如果两个单链表有共同的节点,那么从第一个共同节点开始,后面的节点都会重叠,直到链表结束。
因为两个链表中有一个共同节点,则这个节点里的指针域指向的下一个节点地址一样,所以下一个节点也会相交,依次类推。所以,若相交,则两个链表呈“Y”字形。
2. 【精挑细讲】这5道链表相关算法题,将助你告别链表问题
为了方便大家查找,我这里先给出个目录
1、如何优雅着反转单链表
2、环形单链表约瑟夫问题最优解
3、三种方法带你优雅判断回文链表
4、删除单链表的中间节点
5、将单向链表按某值划分成左边小,中间相等,右边大的形式
6、复制含有随机指针节点的链表
7、将单链表的每K个节点之间逆序
8、将搜索二叉树转换成双向链表
9、删除单链表的第 K个节点
(扫下方海报二维码查看完整版)