C++ 在C+中打印链接列表+;(C+;+;98)
我正在尝试打印链接列表中的节点(正向)。 它的定义如下:C++ 在C+中打印链接列表+;(C+;+;98),c++,printing,linked-list,c++98,C++,Printing,Linked List,C++98,我正在尝试打印链接列表中的节点(正向)。 它的定义如下: struct Node { string val; Node* next; Node* prev; }; struct Stew { Node* first; Node* last; }; 其中Stew有两个特殊指针,一个指向第一个元素,另一个指向最后一个元素 我确信我所尝试的是正确的,但事实并非如此 void print (const Stew& q, char direction) { assert
struct Node {
string val;
Node* next;
Node* prev;
};
struct Stew {
Node* first;
Node* last;
};
其中Stew有两个特殊指针,一个指向第一个元素,另一个指向最后一个元素
我确信我所尝试的是正确的,但事实并非如此
void print (const Stew& q, char direction) {
assert (!isEmpty(q));
{
Node* current = new Node;
current = q.first;
cout << current -> val;
while((current -> next) != NULL)
{
current = current -> next;
cout << (current -> val);
}
delete current;
}
void打印(const-Stew&q,char-direction){
断言(!isEmpty(q));
{
节点*当前=新节点;
电流=q.第一;
库特瓦尔;
while((当前->下一步)!=NULL)
{
当前=当前->下一步;
cout-val);
}
删除当前文件;
}
我知道其中有一个逻辑错误,但我似乎无法指出它。任何帮助都将不胜感激。我认为您的问题可能是您将当前指针视为一个对象。当前指针只是指向内存中的另一个对象。因此,您的行
Node*current=new Node
毫无意义d您正在内存中丢失该节点。您的问题可能是delete current
的最后一行。current指向列表中的最后一项,当您调用delete时,您正在释放当前指向的内存。因此,您正在删除列表中的最后一个对象。您只需要在创建对象时使用delete在内存中,当前不应是新项,而应是指向现有内存的指针。我认为您的问题可能是将当前指针视为一个对象。当前指针只是指向内存中的另一个对象。因此,您的行Node*current=new Node
没有意义,您正在丢失内存中的节点。您的问题可能是delete current
的最后一行。current指向列表中的最后一项,当您调用delete时,您正在释放当前指向的内存。因此,您正在删除列表中的最后一个对象。您只需要在内存中创建对象时使用delete,并且当前不应是新项,而应是指向现有内存的指针。我认为您的问题可能是将当前指针视为一个对象。当前指针只是指向内存中的另一个对象。因此,您的行Node*current=new Node
毫无意义,您正在丢失我的节点莫瑞。你的问题可能是你删除当前对象的最后一行。当前对象指向列表中的最后一项,当你调用delete时,你正在释放当前指向的内存。因此,你正在删除列表中的最后一个对象。你只需要在内存中创建对象时使用delete,当前对象应该是n不是一个新项目,它应该是指向现有内存的指针。我认为您的问题可能是您将当前指针视为一个对象。当前指针只是指向内存中的另一个对象。因此,您的行Node*current=new Node
没有意义,并且您正在丢失内存中的节点。您的问题em可能是您删除当前对象的最后一行。当前对象指向列表中的最后一项,当您调用delete时,您将释放当前指向的内存。因此,您正在删除列表中的最后一个对象。您只需要在内存中创建对象时使用delete,当前对象不应是新项目它应该是指向现有内存的指针。为什么不阅读问题的答案?我已经向您演示了如何按正反顺序打印列表。请参见此处。
为什么不阅读问题的答案?我已经向您展示了如何按正反顺序打印列表。请参见此处。
为什么不阅读问题的答案?我已经向您展示了如何按正反顺序打印列表。请参见此处。
为什么不阅读问题的答案?我已经向您展示了如何按正反顺序打印列表。请参见此处。
首先:
Node* current = new Node;
这完全没有必要。您不想从堆中创建新节点。只需将当前节点指向头节点:
Node* current = q.first;
然后假设current是一个有效节点,并且下一个指针将指向下一个有效节点或NULL以表示列表的结尾,则while()循环开始时出错。应该是这样的:
while(current != NULL)
{
cout << current->val;
current = current->next;
}
while(当前!=NULL)
{
库特瓦尔;
当前=当前->下一步;
}
当然,删除结尾处的“delete”调用。首先:
Node* current = new Node;
这完全没有必要。您不想从堆中创建新节点。只需将当前节点指向头节点:
Node* current = q.first;
然后假设current是一个有效节点,并且下一个指针将指向下一个有效节点或NULL以表示列表的结尾,则while()循环开始时出错。应该是这样的:
while(current != NULL)
{
cout << current->val;
current = current->next;
}
while(当前!=NULL)
{
库特瓦尔;
当前=当前->下一步;
}
当然,删除结尾处的“delete”调用。首先:
Node* current = new Node;
这完全没有必要。您不想从堆中创建新节点。只需将当前节点指向头节点:
Node* current = q.first;
然后假设current是一个有效节点,并且下一个指针将指向下一个有效节点或NULL以表示列表的结尾,则while()循环开始时出错。应该是这样的:
while(current != NULL)
{
cout << current->val;
current = current->next;
}
while(当前!=NULL)
{
库特瓦尔;
当前=当前->下一步;
}
当然,删除结尾处的“delete”调用。首先:
Node* current = new Node;
这完全没有必要。您不想从堆中创建新节点。只需将当前节点指向头节点:
Node* current = q.first;
然后假设current是一个有效节点,并且下一个指针将指向下一个有效节点,或者NULL表示列表的结尾,那么while()循环开始错误