现在我准备编码面试,我有一个关于Java链表的问题。你能告诉我一些可靠的资料来源,我可以从中学习和练习基本的链表方法。我喜欢这个:www.cs.cmu.edu/~adamchik/15-121/lectures/Linked%20Lists/code/LinkedList.java但我对一些方法实现感到困惑。例如,方法E get(int pos)返回NOT节点,但数据E包含在pos位置的节点中。虽然这里http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7u40-b43/java/util/LinkedList.java#LinkedList方法Node节点(int index)返回该位置的节点(而不是其中包含的数据)。我应该遵循哪种实施方案?
答案 0 :(得分:1)
数据结构是一个非常概念化和基于上下文的学科。每种数据结构存在的各种实现都基于数据结构的要求和范围
甚至可以争辩说LinkedList
Collection API
的实现是错误的,因为如果多个线程同时处理它,它就不能很好地工作。然后需要从synchronizedList
类中创建Collections
,或者至少需要使用适用于多个线程的实现。
遵循最低限度的可行惯例,因为面试官不会只问你LinkedList
的实施。面试官想知道的是你的概念和编码技巧是否达到某个标记。
想想你可以用Linked List
做些什么。为此,您必须考虑您实际正在考虑的LinkedList
类型,因为有许多不同类型的LinkedList
,例如SinglyLinkedList
,DoublyLinkedList
,{ {1}}等等。
考虑SkipList
,您的SinglyLinkedList
实施应该至少包含以下方法:LinkedList
,add()
,remove()
,contains()
, clear()
。
以下是我size()
的实施:
SinglyLinkedList
如您所见,我的实现可能与您在其他地方找到的实现不同。只要数据结构的概念没有根本改变,并且只要它与定义的接口一起正常工作,小差异就不是问题。
对于像Data Structures这样的学科,您必须自己思考并根据您的要求,使用或实施适合您需求的数据结构。就访谈而言,您需要展示最小可行数据结构的实现以及所需的全部内容。只需确保这种最小可行数据结构在其上下文中没有错误。