如果示例数据结构被认为是链表,那么如何编写一个可以打印出其所有成员的函数?

如何解决如果示例数据结构被认为是链表,那么如何编写一个可以打印出其所有成员的函数?

我刚刚开始学习链表以进行技术面试,因此这个问题似乎有点奇怪。

我正在从freecodecamp上阅读有关链接列表的介绍文章,这就是文章

在JavaScript中,链接列表如下所示:

const list = {
    head: {
        value: 6
        next: {
            value: 10                                             
            next: {
                value: 12
                next: {
                    value: 3
                    next: null 
                    }
                }
            }
        }
    }
};

我的问题是,这是真实的链表吗?说我有一个问题“打印出以下链接列表中的所有元素,然后自己实现一个链接列表”。我可以使用上面的代码吗?我确实知道如何使用类来实现链接列表,但是我只是想知道上面的代码是否算作链接列表。

我之所以问这个问题,是因为到目前为止我只知道如何解决数组算法问题。 说我要打印出数组中的所有元素。我将需要三个步骤。

  1. 创建一个数组。 // Nums = [1,2,3];
  2. 编写一个函数以将其打印出来。 //函数printNums(Nums){for(...){console.log(Nums [i]}}
  3. 调用函数。 // printNums(Nums);

所以,现在,我想做一个链接列表版本。我该怎么办?

新更新:

所以这是我的LinkedList版本,用于打印所有元素。就像评论中提到的那样,我在代码中所做的实际上是一个链表,但不称为实现。但是,如果我只想测试我的功能怎么办?下列代码对你们有意义吗?

enter image description here

解决方法

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)。该构造函数是核心语言的一部分。您还可以访问pushpopindexOfslicesplice等方法。全部开箱。

与链接列表的区别在于,核心JavaScript并未为其提供实现。你必须自己扔。当然,您可以使用对象文字来创建一个链接列表,但这是一种非常冗长的方式(想象一个包含100个数字的列表),并且容易出错(如果您将next拼写错误了怎么办?)>

所以现在,我想做一个链接列表版本。我该怎么办?

如果仅是为了打印链接列表的内容,而没有其他选择,则可以像您一样进行操作。但是要获得某种提供像开箱即用的接口的东西,您将编写一个包含一些有用方法的类,因此您可以编写:

let myList = LinkedList.from(6,10,12,3);
console.log(...myList.values()); // outputs 6 10 12 3

但是,如果我只想测试我的功能怎么办?下列代码对你们有意义吗?

是的,那很好。如果您知道打印功能将获得null或具有valuenext属性的对象,其中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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?