如何解决如果示例数据结构被认为是链表,那么如何编写一个可以打印出其所有成员的函数?
我刚刚开始学习链表以进行技术面试,因此这个问题似乎有点奇怪。
我正在从freecodecamp上阅读有关链接列表的介绍文章,这就是文章
在JavaScript中,链接列表如下所示:
const list = {
head: {
value: 6
next: {
value: 10
next: {
value: 12
next: {
value: 3
next: null
}
}
}
}
}
};
我的问题是,这是真实的链表吗?说我有一个问题“打印出以下链接列表中的所有元素,然后自己实现一个链接列表”。我可以使用上面的代码吗?我确实知道如何使用类来实现链接列表,但是我只是想知道上面的代码是否算作链接列表。
我之所以问这个问题,是因为到目前为止我只知道如何解决数组算法问题。 说我要打印出数组中的所有元素。我将需要三个步骤。
- 创建一个数组。 // Nums = [1,2,3];
- 编写一个函数以将其打印出来。 //函数printNums(Nums){for(...){console.log(Nums [i]}}
- 调用函数。 // printNums(Nums);
所以,现在,我想做一个链接列表版本。我该怎么办?
新更新:
所以这是我的LinkedList版本,用于打印所有元素。就像评论中提到的那样,我在代码中所做的实际上是一个链表,但不称为实现。但是,如果我只想测试我的功能怎么办?下列代码对你们有意义吗?
解决方法
var l = head;
while (l != null) {
console.log(l.value);
l = l.next;
}
,
我的问题是,这是真实的链表吗?
是的。您有一个数据元素集合,每个数据元素都指向下一个。
说我得到一个问题“打印出以下链接列表中的所有元素,并自己实现一个链接列表”。我可以使用上面的代码吗?
当被要求打印一个特定的链表时,我们应该假定已经弄清楚了该链表的确切接口是什么(例如,节点通过名为next
的属性进行链接,并且它们的值通过一个名为value
的属性)。对于示例列表,这很清楚。所以可以,您可以使用提供的代码。
自己实施链表的问题是一个不同的问题。尽管可以 理解为定义一个特定列表,但这并不是大多数人如何解释该问题的方法。这更有可能意味着您应该实现一个链表 interface :即编写代码,该代码不仅提供构造 any 链表的简便方法,而且还可以使用链表(查找值,插入节点,删除节点,移动节点,...)
我只是想知道上面的代码是否算作链接列表。
是的,您提供的对象文字是链接列表(的一个特定实例)。
说我想打印出数组中的所有元素。我将需要三个步骤。
Create an array. // Nums = [1,2,3];
在此您使用JavaScript语言的功能。隐式地有一个构造函数:new Array(1,3)
。该构造函数是核心语言的一部分。您还可以访问push
,pop
,indexOf
,slice
,splice
等方法。全部开箱。
与链接列表的区别在于,核心JavaScript并未为其提供实现。你必须自己扔。当然,您可以使用对象文字来创建一个链接列表,但这是一种非常冗长的方式(想象一个包含100个数字的列表),并且容易出错(如果您将next
拼写错误了怎么办?)>
所以现在,我想做一个链接列表版本。我该怎么办?
如果仅是为了打印链接列表的内容,而没有其他选择,则可以像您一样进行操作。但是要获得某种提供像开箱即用的接口的东西,您将编写一个包含一些有用方法的类,因此您可以编写:
let myList = LinkedList.from(6,10,12,3);
console.log(...myList.values()); // outputs 6 10 12 3
但是,如果我只想测试我的功能怎么办?下列代码对你们有意义吗?
是的,那很好。如果您知道打印功能将获得null
或具有value
和next
属性的对象,其中next
属性可以是null
或其他这样的对象,...那就可以了。换句话说:您需要了解界面。
技巧是使用while循环,直到下一个元素为空为止。
let prev: LinkedListElement<T> | null = this._start;
let finalEl: LinkedListElement<T> = prev;
let counter = 0;
while (prev !== null) {
const retVal = callback(prev,counter);
if (!retVal) {
break;
}
finalEl = prev;
prev = prev.next;
counter++;
}
让我知道这是否可行。
还要看一下我创建的这个LinkedList类,traverse
函数符合您的要求。
Class GitHub
NPM package - @dsinjs/linked-list
Complete documentation
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。