链表节点结构没有意义 C++

问题描述 投票:0回答:1
#include <iostream>
using namespace std;

class IntNode {
public:
   IntNode(int dataInit = 0, IntNode* nextLoc = nullptr);
   void InsertAfter(IntNode* nodeLoc);
   IntNode* GetNext();
   void PrintNodeData();
private:
   int dataVal;
   IntNode* nextNodePtr;
};

// Constructor
IntNode::IntNode(int dataInit, IntNode* nextLoc) {
   this->dataVal = dataInit;
   this->nextNodePtr = nextLoc;
}

/* Insert node after this node.
 * Before: this -- next
 * After:  this -- node -- next
 */
void IntNode::InsertAfter(IntNode* nodeLoc) {
   IntNode* tmpNext = nullptr;
   
   tmpNext = this->nextNodePtr;    // Remember next
   this->nextNodePtr = nodeLoc;    // this -- node -- ?
   nodeLoc->nextNodePtr = tmpNext; // this -- node -- next
}

// Print dataVal
void IntNode::PrintNodeData() {
   cout << this->dataVal << endl;
}

// Grab location pointed by nextNodePtr
IntNode* IntNode::GetNext() {
   return this->nextNodePtr;
}

int main() {
   IntNode* headObj  = nullptr; // Create IntNode pointers
   IntNode* nodeObj1 = nullptr;
   IntNode* nodeObj2 = nullptr;
   IntNode* nodeObj3 = nullptr;
   IntNode* currObj  = nullptr;
   
   // Front of nodes list
   headObj = new IntNode(-1);
   
   // Insert nodes
   nodeObj1 = new IntNode(555);
   headObj->InsertAfter(nodeObj1);
   
   nodeObj2 = new IntNode(999);
   nodeObj1->InsertAfter(nodeObj2);
   
   nodeObj3 = new IntNode(777);
   nodeObj2->InsertAfter(nodeObj3);
   
   // Print linked list
   currObj = headObj;
   while (currObj != nullptr) {
      currObj->PrintNodeData();
      currObj = currObj->GetNext();
   }
   
   return 0;
}

我无法准确解读这段代码的含义以及它应该如何工作。我目前对C++语法的理解似乎不正确。上面的代码生成一个链表,最后一个节点的指针值指向包含下一个节点的值的内存块。

首先,节点本身的声明没有任何意义,并且与标准变量声明(如

)相比是不寻常的
int number;

据我了解, int main () 中声明的节点是由默认构造函数定义的。每当调用默认构造函数时,都会初始化 dataVal 和 nextNodePtr 的不同实例。 dataVal 初始化为 0,nextNodePtr 初始化为 null。

void IntNode::InsertAfter(IntNode* nodeLoc) {
   IntNode* tmpNext = nullptr;
   
   tmpNext = this->nextNodePtr;    // Remember next
   this->nextNodePtr = nodeLoc;    // this -- node -- ?
   nodeLoc->nextNodePtr = tmpNext; // this -- node -- next

插入代码对我来说没有任何意义。我不知道我应该如何准确地解释这一点

据我所知,这是一个创建 tmpNext 变量并为其赋值 null 的成员函数。在这种情况下,我看不到 this-> 的意义。 InsertAfter 函数采用特定的节点对象,每次调用该函数时都会创建一个 tmpNext 节点,并为其分配一个 null 值。然后为 tmpNext 分配放入函数的特定 Node 对象的 nextNodePtr 值,该值应为 null。

如果 headObj 被插入到函数中,则 nextNodePtr 的 nullptr 值将被分配给 headObj。那么 headObj 指向它自己吗?我也不知道如何阅读下一行。

c++ function pointers linked-list nodes
1个回答
0
投票

提及您关于 headObj 的问题,我认为下一行

nodeLoc->nextNodePtr = tmpNext;
将新节点(nodeLoc)的 nextNodePtr 指针设置为下一个临时存储节点(tmpNext)。这一步至关重要,因为它将新节点正确连接到链表,而不会中断链的流动。本质上,在当前节点与其下一个节点之间插入新节点后,这一行恢复了新节点与当前节点之后原来的节点之间的链接,确保链表仍然正确链接。

© www.soinside.com 2019 - 2024. All rights reserved.