Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中打印链接列表+;(C+;+;98)_C++_Printing_Linked List_C++98 - Fatal编程技术网

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()循环开始错误