编辑
为简单起见:我只想制作最基本的可能光标,它只是通过我的列表而不以任何方式/形状或形成我的“开始”。我仍然希望在我返回某些东西时开始改变,而不是以前。那么是否可以创建一个指针来开始,遍历列表而不更改任何内容,除了在最后我想添加一个新节点时?
我也可以用一个不是“节点”的简单指针浏览列表吗?
/编辑
我有一个简单的(单独的)链表作为我作业的一部分。当然,除此之外我还有很多事情要做,但是在我把列表排除在外之后,一切都应该向前发展,但是当我使用 C++ 一段时间(它是 borland C++)时,我做了很多知道要么被遗忘了一半,要么已经过时。我已经在 python 中编程了一段时间,但这意味着我一直对指针在 C++ 中的工作方式感到沮丧。
我的问题是当我尝试向列表中添加一个新节点时,我的光标行为异常,我将在下面解释:
编辑:好的,我改变了:
Node *cursor;
cursor = new Node
cursor = begin;
惨败,但结果是一样的,在声明光标和开始之后都指向相同的内存位置(类似于:0x32ce8)。
/编辑
Node *add_node (Node *begin,string type, int sum, int ap_nr) // begin is the first node in the list
{
// if first node is dummy node
if (begin->ap_nr == -1)
{
begin->type = type;
begin->ap_nr = ap_nr;
begin->sum = sum;
begin->next = 0;
return begin;
}
// else create new node and insert it in sorted position
else
{
// EDIT:
Node *cursor = begin; // Same problem
//if node should be inserted before first node (begin)
if (ap_nr <begin->ap_nr)
{
cursor->ap_nr = ap_nr;
cursor->type = type;
cursor->sum = sum;
cursor->next = begin;
return cursor;
}
当我调试时,begin 总是有一个相似的形式:0x32ce02,当我创建我的“光标”时,它有一个完全不同的形式(也更长),但是当我这样做时:cursor = begin,然后光标变成这样的 0x32df02。
但是问题是当我到达“if (ap_nr ap_nr)”时,绝对没有可行的原因,光标变为:0x32ce02 和“cursor -> next = begin”确保无限循环。而且无论我添加多少节点,这总是会发生,所以每当我打印列表时,它都是最后添加的节点的无限流。
难道我做错了什么 ?是声明还是分配,创造?某物 ?
另外,如果我在另一个模块的某个地方有一个指针 *begin,并且使用这个函数我返回一个新的 begin ... 那应该可以工作,对吗?
PS我也很欣赏一个简单的计数器解决方案(如果我的不好,另一种方法)
另外我应该指出我是如何制作我的清单的。这只是一个简单的节点链接:
struct Node {
string type;
int ap_nr;
int sum;
Node *next;
};