如何获取下一个节点的值?它总是返回最后一个Node

How can I get the value of the next Node? It always return the last Node

本文关键字:返回 Node 最后一个 何获取 获取 节点 下一个      更新时间:2024-05-09
class Node{
private:
int value;
Node *next;
public:
Node(int aValue){
value = aValue;
cout<< "Node created: " << value <<endl;
}
void setValue(int newValue){
value = newValue;
}
int getValue(){
return value;
}
void setNext(Node node){
next = &node;
}
Node nextNode(){
return *next;
}
};
int main (){
Node nodeA(29);
Node nodeB(3);
Node nodeC(56);
Node nodeD(72);
Node nodeE(69);
nodeA.setNext(nodeB);
nodeB.setNext(nodeC);
nodeC.setNext(nodeD);
nodeD.setNext(nodeE);
cout<< nodeA.nextNode().getValue();
}

链表方法应使用指针。查看您的setNext版本

void setNext(Node node){
next = &node;
}

正如您所看到的,它存储节点参数的地址,这与main中节点对象的地址不同。而且,因为一旦setNext方法退出,节点参数就不存在了,所以您最终会存储一个无效的地址。

试试这个

void setNext(Node* node){
next = node;
}
Node* nextNode(){
return next;
}
int main()
{
...
nodeA.setNext(&nodeB);
nodeB.setNext(&nodeC);
nodeC.setNext(&nodeD);
nodeD.setNext(&nodeE);
cout<< nodeA.nextNode()->getValue(); 
}

您的代码有未定义的行为。

void setNext(Node node){
next = &node;
}

您存储本地node的地址。一旦此函数返回node就不再存在,并且next是一个悬空指针。稍后在nextNode中取消引用该无效指针会调用未定义的行为。

设置";下一个"??

做怎么样

void setNext(Node* node){
next = node;
value = node->value;
}

int getValue(){
return next->value;
}