【发布时间】:2017-10-18 22:01:56
【问题描述】:
我写了一个程序,它可以工作,但我认为它不应该。有人可以解释它为什么有效吗?
我有一个单链表。这是一个项目,所以我不能直接发布代码,但我会稍微改变一下问题
假设我的链接列表是数字 1、2、3、4、4、5 的列表
我需要扫描列表并删除所有重复项,因此我需要删除 4 个中的一个。我需要通过递归来做到这一点。
我正在编写的函数有它的参数/参数作为指向列表开头的指针,我将称之为 pointer
//Base cases up here
if (pointer->value == pointer->next->value){
*toDelete = pointer;
pointer = pointer->next;
delete toDelete;
recur the function
} else recur(pointer->next);
现在这段代码有效,我认为它不应该,因为我从未将前一个节点连接到我删除节点之后的节点。然而,当我查看结果时,所有正确的节点都已连接,并且所有应该删除的节点都被删除了。我在这里误解了什么吗? pointer = pointer->next 不仅仅将 pointer 指向下一个节点的地址吗?
谢谢!
【问题讨论】:
-
您好,您可以发布完整的代码吗?如果您遗漏了某些部分,我们无法判断您做什么或不做什么。
-
如果你(真的)想要一个单链表数据结构,那么看在 $DEITY 的份上,只需使用
std::forward_list就可以了。请。不要重新发明轮子——拜托。更好的是,只需使用std::vector;它可能在现实生活条件下或多或少总是做得更好(不管算法复杂性等和其他理论问题)。 -
@JesperJuhl 不幸的是,我必须按照任务的要求去做。不是我的选择。
-
@SamirAguiar 这就是我们学习的方式,不是吗 :) 观察一些东西,然后质疑它是如何工作的 :)
-
@Duxa:如果你正在做作业;请在您的问题中告诉我们。这有助于防止闲聊。
标签: c++ pointers singly-linked-list