当前位置: 首页 > 知识库问答 >
问题:

从单链表中提取前n个元素

东郭鹤龄
2023-03-14

我正在尝试编写一个方法,该方法接受整数n,并返回一个新列表,其中包含当前对象list的前n个元素,其顺序与它们在当前列表中出现的顺序相同。

我的解决方案如下:

public List firstNelements(int n) {
    List newList = newList();
    Node travel = head, last = null, newNode;
    int counter = 0;
    while (counter < n && travel != null) {
        newNode = new Node();
        newNode.data = travel.data;

        if (last == null)
            last = newList.head = newNode;
        else last = last.next = newNode;

        counter++;
        travel = travel.next;
    }
    return newList;
}

我知道该方法从声明一个新列表开始。从那里,它声明了“旅行”节点,用于在当前列表中迭代。此外,我相信“最后”只是为了跟踪当前对象中的最后一个节点。

我也理解while循环的第一部分;然而,我不明白为什么有条件

if (last == null)
            last = newList.head = newNode;
        else last = last.next = newNode;

是在场的。当代码第一次执行时,节点“最后”为空,所以在第一次迭代中,我猜我们将newNode设置为新列表的头部。但是为什么我们也是最后更新的呢?这是否意味着“最后”正在跟踪新列表中的最后一个节点?我也不知道“其他”声明在这里做什么。

我用n=2追踪了列表{1,2,3}。然而,我仍然无法理解它。while循环的其余部分(在这个条件之后)对我来说是有意义的。

共有2个答案

公西俊德
2023-03-14
匿名用户

if (last == null) {
    last = newList.head = newNode;
} else {
    last = last.next = newNode;
}

>

  • 如果last为null,则设置newList。头新节点,然后最后一个新节点

    如果last不为null,则设置last。下一步新节点,然后上一步到新节点

    每次迭代都会创建newNode=newNode()并分配newNode。数据行程。数据

    假设迭代1创建节点1,迭代2创建节点2。

    在返回的结构中,Node1。接下来是节点2。

    当我们在迭代2中时,我们已经处理了Node1,而不知道下一步是什么(即:node1.next为空)。那么-Node1如何知道“ode1.next”应该是“Node2”?

    这就是这个条件的作用。

  • 邓深
    2023-03-14

    您必须使用的对象似乎是一个链表,即每个节点都有对列表中下一个节点的引用。一个节点是特殊的,称为。这允许迭代所有元素,从开头到结尾(当.nextnull时)。在第一次迭代过程中,必须将该头设置为列表中的某些内容,以便以后进行迭代。当lastnull时,while循环第一次执行。如果这不是第一个循环,那么只有。设置上一个循环中考虑的最后一个节点的下一个指针,以便在元素之间建立正确的链接。

    这是家庭作业吗?也许JavaLinkedList内部正在做类似的事情。如果这不是家庭作业,更好的方法是使用Java集合框架中的现有解决方案,例如subList方法。

     类似资料:
    • 本文向大家介绍Elm从列表中获取第n个元素,包括了Elm从列表中获取第n个元素的使用技巧和注意事项,需要的朋友参考一下 示例 List不支持“随机访问”,这意味着要从列表中获取第五个元素要比第一个元素花费更多的工作,因此没有任何List.get nth list功能。必须从头开始(1 -> 2 -> 3 -> 4 -> 5)。 如果您需要随机访问,则使用随机访问数据结构(例如)可能会获得更好的结果

    • 问题内容: 我正在使用Javascript(ES6)/ FaceBook进行反应,并尝试获取大小变化的数组的前3个元素。我想做相当于Linq take(n)。 在我的Jsx文件中,我有以下内容: 然后得到我尝试的前三个项目 这不起作用,因为地图没有设置功能。 你能帮忙吗? 问题答案: 我相信您正在寻找的是:

    • 有人知道从工作簿中的每个工作表中提取某个单元格值的命令吗?或者我可以写一个简单的宏?

    • 我正在尝试从表中提取特定的信息,基于哪个单元格被单击。到目前为止,我已经创建了一个可以在单击时工作的函数。问题是它总是返回第一个单元格行的值。 HTML: 如您所见,我尝试了和来启用提取槽ID。这是单击时调用的函数。 和总是从表的第一行返回值,即使我单击第二行、第三行、第四行等。 我如何声明我想要的信息不仅来自第一个,而且来自我单击的行。提前谢谢!

    • 问题内容: 我想知道是否有替代 使用 流 ? 问题答案: 定制收集器可以这样写: 并像这样使用它:

    • 假设我有这样一个列表: 是否可以使用Java8流从该列表中每隔一秒获取一个元素以获得以下内容? 或者甚至每三个元素? 基本上,我正在寻找一个函数来获取流的每n个元素: