问题标签 [linked-list]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 递归地反转Java中的链表
一段时间以来,我一直在为一个班级从事 Java 项目。它是一个链表的实现(这里称为AddressList
,包含称为 的简单节点ListNode
)。问题是一切都必须使用递归算法来完成。我能够在没有一种方法的情况下做得很好:public AddressList reverse()
列表节点:
现在我的reverse
函数只是调用一个辅助函数,它接受一个参数来允许递归。
我的辅助函数具有private ListNode reverse(ListNode current)
.
目前,我让它使用堆栈迭代地工作,但这不是规范所要求的。我在 C 中找到了一种算法,它可以递归地反转并手动将其转换为 Java 代码,并且它可以工作,但我不了解它。
编辑:没关系,我在此期间想通了。
当我在这里时,有人发现这条路线有什么问题吗?
algorithm - 二叉树 vs. 链表 vs. 哈希表
我正在为我正在处理的项目构建符号表。我想知道人们对存储和创建符号表的各种方法的优缺点有何看法。
我进行了相当多的搜索,最常见的推荐是二叉树或链表或哈希表。以上所有的优点和缺点是什么?(在 C++ 中工作)
arrays - 何时在数组/数组列表上使用链表?
我使用了很多列表和数组,但我还没有遇到过这样的场景:数组列表不能像使用链表一样容易,如果不是更容易的话。我希望有人能给我一些链接列表何时明显更好的例子。
c++ - 如何在 C++ 中创建列表?
如何在 C++ 中创建列表?我需要它来创建一个链表。我该怎么做呢?有没有我可以学习的好教程或示例?
c - 哪一个使用链表或静态数组?
我在 C 中有一个类似于数据库表记录的结构。现在当我使用 select 查询表时,我不知道我会得到多少条记录。我想将选择查询返回的所有记录存储在我的结构数据类型的数组中。
哪种方法最好?
方法一:查找数组大小并分配
- 首先通过从表中执行 select count(*) 来获取记录数
- 分配一个静态数组
- 运行 select * from table 然后将每个记录存储在我的结构中。
方法二:使用单链表
哪种实现最好?
我的要求是,当我拥有所有记录时,我可能会复制它们或其他东西。但我不需要随机访问,也不会对特定记录进行任何搜索。
谢谢
performance - 在单链表中找到指向节点 M 步长的指针的算法
假设有一个长度未知的单链表。我们想找到到尾部有 M 步的节点。
例如,单列表是这样的:(A)->(B)->(C)->(X)->(Y) 和 M = 2。那么输出应该是指向 (C) 的指针。
面对这个测验,我的第一反应是遍历单链表得到长度N。然后第二次遍历单链表,但只向前NM-1步。时间复杂度为 O(n),空间复杂度为 O(1)。
然后,我面临的挑战是找到一种解决方案以单次遍历的方式进行。解决方案是有两个指针。第二个指针比第一个指针落后 M 步。这两个指针以相同的速度向前移动。当第一个指针到达尾部时,第二个指针就是结果。
经过对这个问题的深入思考,我真的不相信第二个“棘手”的解决方案比第一个更好。它是一次遍历,但它也涉及 2*NM 指针分配。
有没有想过这个问题?还有其他真正更快的解决方案吗?
algorithm - 如何确定一个链表是否有一个仅使用两个内存位置的循环
有谁知道一种算法来查找链表是否在自身上循环,只使用两个变量来遍历列表。假设您有一个对象的链接列表,那么什么类型的对象都没有关系。我在一个变量中有一个指向链表头部的指针,我只得到另一个变量来遍历列表。
所以我的计划是比较指针值,看看是否有相同的指针。该列表的大小有限,但可能很大。我可以将两个变量都设置为头部,然后用另一个变量遍历列表,总是检查它是否等于另一个变量,但是,如果我确实遇到了一个循环,我将永远无法摆脱它。我认为这与遍历列表和比较指针值的不同速率有关。有什么想法吗?
sql - 如何在sql中对链表进行排序?
我已经将链表实现为自引用数据库表:
其中 Id 是主键,ParentId 是列表中上一个节点的 Id。第一个节点的 ParentId = NULL。
我现在想从表中选择,按照它们应该出现的相同顺序对行进行排序,作为列表上的节点。
例如:如果表包含行
然后使用标准对其进行排序,结果应该是:
您应该使用SomeData列作为控件,所以请不要欺骗 通过 SomeData 进行 ORDER :-)
c++ - 为什么我不能将此对象推送到我的 std::list 上?
刚开始用 C++ 编程。
我创建了一个 Point 类、一个 std::list 和一个迭代器,如下所示:
然后我将新点推送到 pointList 上。
现在,我需要遍历 pointList 中的所有点,所以我需要使用迭代器进行循环。这就是我搞砸的地方。
更新
你们是对的,问题不在于我迭代列表。看来问题出在我试图将某些内容推送到列表时。
确切的错误:
mouse.cpp:在函数
void mouseHandler(int, int, int, int)': mouse.cpp:59: error: conversion from
Point*' 中请求非标量类型“Point”
这些行是:
Point* 到非标量类型 Point 之间的转换是什么?我只是想创建新点并将它们推到这里的列表中。
java - 比较 LinkedList.contains() 中的对象
我希望能够让 LinkedList.contains() 为自定义比较器返回 true。
假设我有 1 个 LinkedList 和 2 个对象
从技术上讲,两个对象在比较方面是相同的(MyObject 实现 Comparable)
(a == b) == 真
但是,当我执行以下操作时,myList 不会为 myList.contains(b) 返回 true
我认为它是因为 contains 将检查对象引用并看到 a 和 b 是 2 个不同的对象。有什么办法可以做到,所以我不必扩展 LinkedList 来比较这些对象?