问题标签 [singly-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.

0 投票
3 回答
908 浏览

c++ - 链接列表中的光标无缘无故地改变值

编辑

为简单起见:我只想制作最基本的可能光标,它只是通过我的列表而不以任何方式/形状或形成我的“开始”。我仍然希望在我返回某些东西时开始改变,而不是以前。那么是否可以创建一个指针来开始,遍历列表而不更改任何内容,除了在最后我想添加一个新节点时?

我也可以用一个不是“节点”的简单指针浏览列表吗?

/编辑

我有一个简单的(单独的)链表作为我作业的一部分。当然,除此之外我还有很多事情要做,但是在我把列表排除在外之后,一切都应该向前发展,但是当我使用 C++ 一段时间(它是 borland C++)时,我做了很多知道要么被遗忘了一半,要么已经过时。我已经在 python 中编程了一段时间,但这意味着我一直对指针在 C++ 中的工作方式感到沮丧。

我的问题是当我尝试向列表中添加一个新节点时,我的光标行为异常,我将在下面解释:

编辑:好的,我改变了:

惨败,但结果是一样的,在声明光标和开始之后都指向相同的内存位置(类似于:0x32ce8)。

/编辑

当我调试时,begin 总是有一个相似的形式:0x32ce02,当我创建我的“光标”时,它有一个完全不同的形式(也更长),但是当我这样做时:cursor = begin,然后光标变成这样的 0x32df02。

但是问题是当我到达“if (ap_nr ap_nr)”时,绝对没有可行的原因,光标变为:0x32ce02 和“cursor -> next = begin”确保无限循环。而且无论我添加多少节点,这总是会发生,所以每当我打印列表时,它都是最后添加的节点的无限流。

难道我做错了什么 ?是声明还是分配,创造?某物 ?

另外,如果我在另一个模块的某个地方有一个指针 *begin,并且使用这个函数我返回一个新的 begin ... 那应该可以工作,对吗?

PS我也很欣赏一个简单的计数器解决方案(如果我的不好,另一种方法)

另外我应该指出我是如何制作我的清单的。这只是一个简单的节点链接:

0 投票
2 回答
127 浏览

c++ - 指针似乎无缘无故地重新设置

编辑:我也不介意知道这是否太模糊以至于您无法理解或发现问题所在,我知道它与代码没有直接关系,因为更改发生在我即将到来的时候退出函数......不是在实际的“代码”期间。所以我希望这已经足够了,不管如果需要我会添加更多。先感谢您!

我正在尝试制作一个简单的(单向)链表,我必须自己制作,而不是使用 STL 或任何其他已经制作的动态容器。我做了一个简单的,但我似乎有一个我根本无法解决的问题。

每当我在列表中创建一个新节点时(我总是返回列表的第一个节点以防它被更改,我不使用“哨兵”或“虚拟”节点)新节点是好的,直到我到达一个程序中的某个点,当它自行重置到我介绍的第一个节点时。

为了尽量让我的帖子保持干净,我将插入更少的代码和更多的“功能”或模式,但如果这还不够,我会添加更多。

下面是它的工作原理:

我的节点项目

在 main 中,我将我的第一个节点初始化为“假”节点(ap_nr = -1,其他 ap_nr 不能为负数)。

这是我的输入命令:

我使用 atm 的处理程序的唯一部分:

将一个节点添加到列表后,我使用调试来跟踪它,第一个保持原样,但是第二个节点(我在第一个节点之前添加它并返回新的“开始”),一开始没关系(有一个新的内存位置,new_begin->next = old_begin但在我退出ìnput_command结构后它会重置)

*下面是 input_command 结构和程序图:*

主要: - 初始化“假”节点/进入菜单循环 -> 进入 input_command。

UI: -输入命令->读取命令->验证->发送到处理程序。

列表: - 将期望节点添加到“列表”(实际上没有列表本身,只是链接节点)-> 返回第一个节点。第一个节点没问题(有新地址,指向旧节点)

返回 UI:-> 输入命令(小括号)并重置(我的意思是,无论我添加什么节点,它都会成为我添加的第一个节点。假设我介绍了公寓 1 到 10,它只记得“1”)。

我错过了什么吗?我的设计中有逻辑错误吗?您需要更多代码来评估吗?告诉我要添加什么,我意识到这有点模棱两可。

注意:现在我只能在我的主节点之前添加节点,在我使它正常工作之前,我不会专注于任何新的东西,只要我的设计不是问题的一部分,我也不会改变它,但是如果很糟糕,我会很感激笔记和建议。

这是 add_node 函数唯一实现的部分:

0 投票
1 回答
106 浏览

c++ - 创建一个指针的指针并修改它而不修改原来的?

随意编辑标题,engrish 有时会混淆而不是帮助。

我必须制作(不,我不能改变,这就是它必须的方式)简单的链表。不,我不能使用 STL 或 std::list。大部分都是在纸上完成的,但我似乎在实现一个非常基本的光标时遇到了问题。

这是列表中的我的节点(它的一部分):

我想通过我的添加节点函数中的列表:

这就是我调用函数的方式:

我想创建一个从开始(我的列表的头部)开始的游标,并通过每个节点使用cursor->next直到我到达结尾(while (cursor->next!=0))

但我不能简单地说:

因为这只会用开始覆盖光标,使我的尝试无效。我仍然必须创建一个指针才能开始并能够调用 STRUCT 函数“-> next”

我怎样才能做到这一点 ?

* 还 *我怎样才能记住以前的节点?我可以这样做吗:

0 投票
4 回答
1343 浏览

c++ - 在 C++ 中创建单链表的一些指针

我有一个 uni 分配,我必须在其中实现一个单链表,其中包含从称为 Shape 的通用抽象基类派生的不同对象。

我将链接到 GitHub 以获取类实现:shapes.hshapes.cpp。到目前为止,它由Shape及其派生类组成Circle。也会有RectanglePoint以后还会有Polygon

我现在应该实现这些不同形状的单链表。到目前为止,我已经为List-class 和Node-class 提出了以下类原型:

应该能够以以下样式从 main 调用向 -objectvoid Append(Shape& inData)添加元素:ShapeList

鉴于这些信息,我应该如何实施void Append(Shape& inData)?我尝试了几种不同的方法,但到目前为止还没有提出正确的解决方案。

参数 to 也完全有可能Append不是(Shape& inData).

编辑:

我已经实现Append(Shape& inData)了,但它只在某些时候有效:

但不与

到目前为止,我的Append()-implementation 如下所示:

你们觉得这样好吗?

0 投票
1 回答
6525 浏览

c - 乘以 2 个数字,由 2 个数字链接列表表示

我需要一些关于我的家庭作业的想法。考虑以下定义:

每个列表节点代表一个数字。每个数字由一个列表表示,但以相反的方式表示:数字的最后一位是列表的第一个列表节点,数字的第一位是列表的最后一个列表节点。

我写了函数

它返回一个新列表,其中包含其他两个列表的总和。

现在我必须编写乘法函数:

而且我有点坚持如何实施它。这不是关于代码,而是关于如何去做。不用说,我们不允许将数字转换为整数、乘以将结果转换为列表。

任何帮助将不胜感激。

谢谢。

0 投票
2 回答
1178 浏览

python - python中带有特殊方法的单链表,卡住了

具有两个类 Node 和 LinkedList 的单链表很容易实现。但是我的问题是当涉及到一个只有第一个节点访问的单链表时(没有存储长度,没有最后一个节点访问,并且没有使用虚拟节点)。我无法绕开或在网上找到太多关于的特殊方法类似于具有O(1)复杂度的pythons内置列表操作,例如:

任何形式的领导、帮助、指导将不胜感激。出于某种原因,如果没有虚拟节点或存储长度和迭代器,我无法将 python 的内置列表运算符解释为我自己在 LinkedList 中的方法。看着它,我似乎离得很近,但我所做的或发现的一切似乎都无济于事。谢谢你。

0 投票
2 回答
787 浏览

c++ - 类体之外的成员函数定义导致错误

我对模板的概念很陌生。我错过了什么吗?

当我取消注释函数 getNewNode 并将相应的语句推荐给 getNewNode 函数时,编译器会给出错误,例如为什么我的函数 getNewNode 没有按预期工作。我哪里做错了?

0 投票
1 回答
298 浏览

c++ - 以起始值作为函数中的默认值打印链表中的值

我正在尝试创建一个递归函数,它将向后打印链表中的所有元素。

这是我所做的功能:

现在来回答这个问题。我想设置参数 pocetak 的默认值,以便函数可以打印没有起始值的列表。

但是当我这样做时:

我总是收到一条错误消息:main.cpp:17:19:错误:没有匹配函数调用'lista::printBack()' main.cpp:17:19:注意:候选人是:lista.h:20: 10:注意:void lista::printBack(node*) lista.h:20:10:注意:候选人需要 1 个参数,提供 0

这是我能做到的吗?谢谢你。

0 投票
5 回答
102146 浏览

java - Java - 返回值是否会破坏循环?

我正在编写一些基本上遵循以下格式的代码:

该代码将在节点列表中搜索一个元素。但是,我的问题是,如果 while 循环确实找到了 if 语句说它应该返回 true 的元素,它会简单地返回 true 并中断循环吗?此外,如果它确实打破了循环,它会继续执行该方法并仍然返回false,还是一旦返回值,该方法是否完成?

谢谢

0 投票
27 回答
128882 浏览

algorithm - 面试题:合并两个已排序的单链表而不创建新节点

这是在面试笔试期间提出的编程问题。“你有两个已经排序的单链表,你必须合并它们并返回新列表的头部而不创建任何新的额外节点。返回的列表也应该排序”

方法签名为:Node MergeLists(Node list1, Node list2);

节点类如下:

我尝试了许多解决方案,但没有创建额外的节点螺丝钉。请帮忙。

这是随附的博客条目http://techieme.in/merging-two-sorted-singly-linked-list/