20+ 针对 Java、C++ 和 Python 程序员的链表面试题
披露:本帖包含附属链接;如果您通过本文提供的不同链接购买产品或服务,我可能会收到报酬。
大家好,我一直在为那些积极寻找 Java、Python 或 C++ 开发工作的程序员分享很多编码面试问题,特别是初学者、初级开发人员和刚毕业且没有实际工作经验的计算机工程师。
过去,我分享过一些数据结构问题、字符串算法问题和一些有用的在线课程来准备编程工作面试,今天我将分享编码面试中常见的链表问题列表。
数据结构是任何编程工作面试中最重要的部分之一,并且通常是选择或拒绝候选人的原因,这就是为什么回顾和练习这些基于数据结构的问题会让你在竞争中占据优势。
它还会让你成为一个更好的程序员,因为你在解决这些问题时培养了逻辑和编码意识,这对你的编程生涯大有裨益。
解决这些编码问题不仅可以帮助您更好地学习编程语言和工具,还可以磨练您的解决问题的技能,这对任何专业开发人员来说都非常重要。
毕竟,您需要提高您的解决问题的能力,以便您可以解决任何未知问题并将其转换为代码,练习这些问题可以帮助您实现该目标。
什么是链表?
链表是另一种常见的数据结构,它是数组数据结构的补充。与数组类似,链表也是一种线性数据结构,以线性方式存储元素。
但是,与数组不同的是,它并不将它们存储在连续的位置;相反,它们分散在内存中的各处,并通过节点相互连接。
链表只不过是一个节点列表,其中每个节点包含存储的值和下一个节点的地址。
由于这种结构,在链表中添加和删除元素很容易,因为您只需要更改链接而不是创建数组,但搜索很困难,通常需要 O(n) 时间才能在单链表中找到一个元素。
以下是链表数据结构的一些重要属性:
-
链表是一种递归数据结构,这意味着您可以使用递归来解决基于链表的问题。
-
在链表中,每个节点都包含下一个节点的地址,这意味着你不需要像数组那样占用一大块连续的内存来创建长链表。你仍然可以使用分散的内存来创建它们。
-
在链表中添加或删除元素更容易,因为只需移除或重新指向链接即可,而不像数组那样需要移动元素。将元素添加到头部需要 O(1) 的时间复杂度。
-
在链表中搜索很困难,并且搜索列表需要 O(n) 时间,因为您需要遍历列表才能到达目标节点。
本文提供了有关数组和链表数据结构之间的差异的更多信息。
它还具有多种形式,例如单链表,允许您沿一个方向遍历(正向或反向);双向链表,允许您沿两个方向遍历(正向和反向);最后是循环链表,它形成一个圆圈。
如何解决链表编码问题?
为了解决基于链表的问题,熟悉递归非常重要,因为链表是一种递归数据结构。
如果从链表中取出一个节点,剩余的数据结构仍然是链表,因此,许多链表问题的递归解决方案比迭代解决方案更简单。
它们也可以使用分而治之的技术来解决,即将问题分解为子问题,直到可以解决它们。
例如,要反转一个链表,你需要断开链表直到只剩下一个节点,此时,你就知道如何反转一个节点的链表,它只不过是同一个节点。
它与递归非常相似,实际上,您可以解决的最小子问题成为递归解决方案的基本情况。
顺便说一句,如果你没有数据结构的基础知识,或者最近没有复习过这些知识,那么解决这些基于链表的编码问题是没有意义的。在这种情况下,我建议你先学习一些优秀的数据结构和算法课程或书籍来复习一下概念。
如果您需要建议,以下是我经过尝试和测试的一些资源,可以深入学习数据结构和算法:
- 数据结构和算法:面向Java 开发人员的
- 面向 Python 爱好者的Python 算法和数据结构
- Colt Steele 为 JavaScript 程序员开设的JavaScript 算法和数据结构大师班
- 精通 C/C++ 的人士可以使用 C 和 C++ 掌握数据结构和算法
- Java 中的数据结构:面试复习,用于复习 Java 中的重要数据结构和算法概念。
如果你喜欢书籍,没有比Thomas H. Cormen的《算法导论》更好的了。它是数据结构和算法领域最全面的书籍之一,对高级程序员和软件开发人员都很有帮助。
20+ 编码面试中常见的链表问题
不想浪费时间,以下是一些编程面试中最常见、最热门的链表面试题。我尽可能地提供了答案链接,但我建议你先尝试自己解决问题,这会对你大有裨益,因为你会思考并学习。一旦你解决了问题,或者尝试后遇到困难,你可以查看答案并从中学习。
-
如何一次性找到单链表的中间元素?(解决方案)
-
如何在不使用递归的情况下反转单链表?(解决方案)
-
如何在无序链表中删除重复节点?(解决方案)
-
如何找到单链表的长度?(解决方案)
-
如何检查给定的链表是否包含循环?如何找到循环的起始节点?(解决方案)
-
如何反转链接列表?(解决方案)
-
如何在单链表中查找倒数第三个节点?(解决方案)
-
如何使用 Stack 找到两个链表的总和? (解决方案)
-
如何就地反转链接列表?(解决方案)
(http://www.java67.com/2017/06/5-difference-between-array-and-linked.html )**)** -
如何从链表的末尾删除第 N 个节点?(解决方案)
-
如何合并两个已排序的链表?(解决方案)
-
如何在链表中间添加元素?(解决方案)
-
如何在 Java 中对链表进行排序?(解决方案)
-
数组和链表有什么区别?( [答案]
-
如何将排序列表转换为二叉搜索树?(解决方案)
-
给定一个链表和一个值x,对其进行分区,使得所有小于x的节点都位于大于或等于x 的节点之前。 (解决方案)
-
如何从与给定值匹配的整数链表中删除所有元素?(解决方案)
-
如何找到两个单链表交集的起始节点。 (解决方案)
-
如何检查给定的链表是否是回文?(解决方案)
-
如何从排序链表中删除重复项?(解决方案)
这些问题将帮助您培养解决问题的能力并提高您对链表数据结构的了解。
如果您在解决这些链表编码问题时遇到困难,那么我建议您通过“数据结构和算法:使用 Java 深入研究”课程来刷新您的数据结构和算法技能。
如果这些问题还不够,那么您还可以查看这份包含30 个链表面试问题的列表,以获取更多练习题。
编码面试的有用资源
如果您需要一些有用的资源来在编程和编码工作面试中取得好成绩,那么您应该查看以下一些在线课程和书籍:
我在本文中分享了很多资源,供Java、Python和C++ 开发人员学习数据结构和算法。
这些资源中有些是免费的,有些是付费的,对于付费资源,如果您使用本文中的链接购买,我会得到报酬,但只有当您真正需要它们并且观看预览和阅读示例章节后才会购买。
它们是最好的资源,但对于您来说,与作者或讲师建立联系以充分利用它们非常重要,因此请购买与他们建立联系的资源。
现在你离编程面试又近了一步
这些是数据结构和算法之外的一些最常见的问题,可以帮助您在面试中取得好成绩。
我也在我的博客上分享了很多数据结构和算法问题,所以如果你真的感兴趣,你可以随时去那里搜索它们。
这些常见的编码、数据结构和算法问题是您在与任何公司(无论大小)进行任何级别的编程工作面试时成功需要了解的问题。
如果您正在寻找Java、Python或C++ 编程和软件开发工作,您可以从这份编码问题列表开始准备。
此列表提供了很好的准备主题,也有助于评估您的准备情况,找出您的优势和劣势领域。
良好的数据结构和算法知识对于编码面试的成功至关重要,这也是您应该集中大部分注意力的地方。
您可能喜欢的其他数据结构文章
每个程序员都应该阅读的 10 本算法书籍
Java 开发人员的 5 本最佳数据结构和算法书籍
20 多个面试中的字符串编码问题
100 多个面试中的数据结构和算法问题
30 多个基于数组的编码面试问题
从 0 到 1:Java 中的数据结构和算法
数据结构和算法分析——求职面试
10 本准备技术编程/编码面试的书籍
了解动态编程模式以进行编码面试
了解系统设计面试
结束语
谢谢,你终于读完了这篇文章……祝你的编程面试好运!这当然不会很容易,但练习完这些问题后,你离成功和梦寐以求的工作又近了一步。
如果您喜欢这篇文章,请与您的朋友和同事分享,并且不要忘记在 Twitter 上关注javinpaul!
PS --- 如果您需要一些免费资源,您可以查看此免费数据结构和算法课程列表来开始您的准备。
文章来源:https://dev.to/javinpaul/review-these-linked-list-interview-questions-before-your-java-python-or-c-programming-interviews-35o4