链接列表 - 几乎完成,但仍然是一些小问题。需要帮助

时间:2011-02-26 17:13:49

标签: c++

void currentfor() 

{

   if(current == NULL) 

{

      cout << "You don't have any members yet!" << endl;

   }
 else
 {

 if (current->next == NULL)

         cout << "This is the end of the list." << endl;
      else
         current = current->next;
   }

}

void currentbac() 
{

   if (current == first)

      cout << "This is the beginning of the list." << endl;

   else
 {

      list *previous;

      previous = first;

      while (previous->next != current)
 {

         previous = previous->next;

      }

      current = previous;

   }

}

我几乎在那里,但仍有问题。

当我移动当前位置时,如何知道当前位置的位置?因为每当我使用这两个移动功能时,它似乎都不起作用。我移动时尝试在“当前”位置添加一个节点,但它总是在所有节点之后添加项目。

在我之前的代码中加上我无法改变“&lt; - 当前位置”指向所有节点而不是一个节点的事实。

我想指向一个节点,因此更清楚的是用户知道当前指针所在的位置。

希望人们理解.-。我只是不习惯C ++,但我的教授希望我自己学习(无论那意味着什么)我一直在尝试在线获取参考资料,因此很难获得我正在进行的项目的链接列表信息。

4 个答案:

答案 0 :(得分:1)

“当我移动时,我尝试在”当前“位置添加一个节点,但它总是在所有节点之后添加。”

问题在于您添加节点代码,而不是移动代码。

您尚未发布添加节点代码,因此很难说出问题所在。您必须在新节点之前和之后取消链接节点并将它们链接到新节点,然后将新节点链接到之前和之后的两个旧节点 - 始终记住要小心处理第一个和最后一个节点。你做完了吗?

答案 1 :(得分:0)

如果您只需要项目的链接列表实现,建议使用std :: list。看看http://www.cplusplus.com/reference/stl/list/。如果您想学习c ++,那么该页面上还有一个教程。

答案 2 :(得分:0)

如果您希望能够向后浏览链接列表,我建议您将其实现为doubly linked list。也就是说,每个元素上都有一个next和prev指针。以这种方式导航会更简单。

答案 3 :(得分:0)

指定节点的结构。 (我的意思是您在列表节点中保存的数据。例如,Int或float或某个对象)。正如JohnFx所说,向后遍历的最佳方法是使用双向链接列表。指定您正在使用的插入代码和您的节点sturture。