C++ 双链表
我在理解这段代码时遇到了一些困难。它工作得很好,但是我不理解它的某些部分 支持使用给定代码将文件添加到列表中。 但让我困惑的是 fNext->fPrevious=&阳极 fNext=&阳极 第一部分是为fNext->fPrevious赋值 但是,第二部分不是将fNext的值写入&Node吗 在这种情况下,fNext->fPrevious和fNext中的值不应该相同吗 谁能给我解释一下吗。我已经看过这些例子了,但是我理解双链表的概念,但是我不理解这段代码 也可以有人详细说明这一部分吗 Anodel.fPrevious=这个C++ 双链表,c++,algorithm,doubly-linked-list,C++,Algorithm,Doubly Linked List,我在理解这段代码时遇到了一些困难。它工作得很好,但是我不理解它的某些部分 支持使用给定代码将文件添加到列表中。 但让我困惑的是 fNext->fPrevious=&阳极 fNext=&阳极 第一部分是为fNext->fPrevious赋值 但是,第二部分不是将fNext的值写入&Node吗 在这种情况下,fNext->fPrevious和fNext中的值不应该相同吗 谁能给我解释一下吗。我已经看过这些例子了,但是我理解双链表的概念,但是我不理解这段代码 也可以有人详细说明这一部分吗 Anodel
void DoublyLinkedNode<DataType>::append(Node& aNode)
{
aNode.fPrevious = this;
if (fNext != &NIL)
{
aNode.fNext = fNext;
fNext->fPrevious = &aNode;
}
fNext = &aNode;
}
void DoublyLinkedNode::append(节点和阳极)
{
Anodel.fPrevious=此;
如果(fNext!=&NIL)
{
阳极.fNext=fNext;
fNext->fPrevious=&阳极;
}
fNext=&阳极;
}
DoubleLinkedNode的构造函数如下所示
template<class DataType>
DoublyLinkedNode<DataType>::DoublyLinkedNode(const DataType& aValue)
{
fValue = aValue;
fPrevious = &NIL;
fNext = &NIL;
}
模板
DoublyLinkedNode::DoublyLinkedNode(常量数据类型和aValue)
{
f值=有效值;
fPrevious=&NIL;
fNext=&NIL;
}
我现在感到困惑的是fNext->fPrevious和fNext之间的区别。两者都指向同一事物
不,他们不是。是的,我们确实将fNext->fPrevious
设置为&阳极
。但是在我们将fNext
设置为阳极后,fNext
不是我们设置的fp上一个的节点,而是阳极。所以fNext->fPrevious
是阳极.fPrevious
,它是这个
,而不是阳极
也许给所有这些节点起名字会有帮助,并以图形化的方式查看。在调用append
之前,您有如下操作:
prev this next aNode
... <-- fPrevious <-- fPrevious NIL <-- fPrevious
fNext --> fNext --> ... fNext --> NIL
然后将fNext->fPrevious
设置为&阳极
。由于fNext
当前是next
节点,因此您正在将next
的返回指针更改为指向阳极的点:
prev this aNode next
... <-- fPrevious <-- fPrevious <-- fPrevious
fNext --> fNext \ fNext --> ...
-------------------/
prev this aNode next
... <-- fPrevious <-- fPrevious <-- fPrevious
fNext --> fNext --> fNext --> ...
现在,阳极
被正确地插入到链表中,在这个
和下一个
之间,每个人都同意所有事情。有很多方法可以实现双链表。谢谢你指出这一点,但是你能解释一下代码中发生了什么吗?显示完整的代码,这样就可以回答问题了,但我认为作者正在尝试在两个节点之间添加一个新节点。fNext和Previous是连接相邻列表的指针,但我目前感到困惑的是fNext->fPrevious和fNext之间的区别。两者都指向同一事物。据我所知,上一个和下一个不应该指向同一个对象,但在这种情况下,我认为它是。代码运行良好,但我在理解它时遇到了一些困难。感谢它帮助我理解它,虽然我仍然有点困惑,但非常感谢@BIYAYDHAWA可能会帮助你在调试器中运行代码,甚至可以在线可视化器(尽管它的名字,它也处理C++)。但是,基于指针的结构是其中之一,你只需要不断地敲打你的头,直到突然你得到了抽象有意义的“啊哈”时刻。继续尝试是值得的,即使这并不容易。是的,我明白了,每次我看代码的时候我都觉得我懂了一点。谢谢你的图表,它帮了我很多忙
prev this aNode next
... <-- fPrevious <-- fPrevious <-- fPrevious
fNext --> fNext --> fNext --> ...