C++ 我是否在此算法中正确地重新排列了LinkedList节点?

C++ 我是否在此算法中正确地重新排列了LinkedList节点?,c++,pointers,linked-list,nodes,C++,Pointers,Linked List,Nodes,请注意,这是一项作业。我不需要直接回答这个问题,但我想知道我把事情搞砸了。我相信我得到了一个无限循环,或者我在某个点上失去了一个链接 我的任务是接收列表,删除重复项(如果它们不是第一个重复项),然后创建列表的镜像。如果数据只有一个副本,则使用该节点并移动它,而不是删除它。如果没有重复项,请为其创建一个节点。我不允许使用外部函数来执行此操作。这意味着大量的指针操作 我对它的思考过程是,我将有一个锚,并通过循环找到是否有任何重复。如果有,请将第一个副本移动到列表的末尾,并删除其余副本。这将创建列表的

请注意,这是一项作业。我不需要直接回答这个问题,但我想知道我把事情搞砸了。我相信我得到了一个无限循环,或者我在某个点上失去了一个链接

我的任务是接收列表,删除重复项(如果它们不是第一个重复项),然后创建列表的镜像。如果数据只有一个副本,则使用该节点并移动它,而不是删除它。如果没有重复项,请为其创建一个节点。我不允许使用外部函数来执行此操作。这意味着大量的指针操作

我对它的思考过程是,我将有一个锚,并通过循环找到是否有任何重复。如果有,请将第一个副本移动到列表的末尾,并删除其余副本。这将创建列表的前半部分作为原始列表,后半部分作为镜像

还要注意,如果列表为空,则不执行任何操作。如果只有一个节点,请复制它并完成

这是我编写的代码,但它似乎有一个问题。当我尝试构建它时,它一直告诉我exe已经停止工作

编辑#2修改代码,不久将更新。

谁能帮我指出我的错误在哪里?我一直在为此绞尽脑汁

更新
看起来我在处理将最后一个节点链接到nullptr时遇到了问题。我已经更新了代码,现在我的问题似乎是我没有处理所有的节点。我想我没有处理最后一个?我将继续处理此问题,并检查是否有人指出了我的错误。

因为
end
指向列表中的最后一个节点,
而(anchor!=end)
会导致循环在复制最后一个节点之前结束。您必须要么改变循环的退出条件,要么考虑<代码>结束>代码>特殊情况,并在循环之后复制它。


您可能还想考虑如果列表中的最后一个节点是一个较早的节点的副本,那么它会被删除。

只需澄清,您的目标是将反向列表链接到初始列表的末尾吗?所以Item1->…->ItemN->ItemN->…->Item1?@trm你是对的,这是我的目标。我只是更新了我的代码,做了一些修改。我不再得到一个无限循环,但现在我似乎停止了我的迭代?相关的,如果您对如何使用指针到指针算法和相当少的代码来实现这一点感兴趣。仅仅使用节点指针做这样的事情总是一件痛苦的事情,因为你关心的节点并不多;这是操纵的真正挑战。我一次只处理一件事。让我们从退出条件开始。我尝试了
end->link
而不是
end
,得到了相同的结果。我是否也应该尝试在循环内部处理这个问题?为了澄清,我将两个循环都更改为退出
end->link
(我将询问在解决此部分后删除的最后一个节点)