Редактировать
Для простоты: Я просто хочу сделать самый простой возможный курсор, который просто идетчерез мой список без каких-либо изменений / формы или формы моего «начала».Я все еще хочу начать меняться, когда я возвращаю что-то, хотя, только не раньше.Так можно ли сделать указатель для начала, пройти по списку, не меняя ничего, кроме как в самом конце, когда я хочу добавить новый узел?
Также Могу ли я просто пройти по списку с помощью простого указателя, который не является «Узлом»?
/ Edit
У меня есть простой(отдельно) связанный список, чтобы сделать как часть моей домашней работы.Конечно, у меня также есть много дел, кроме этого, но после того, как я получу список, все должно быть прямо вперед, но пока я некоторое время пользуюсь C ++ (это был Borland C ++), многое из того, что язнал или наполовину забыт или устарел.Некоторое время я программировал на python, но все это означает, что я продолжаю расстраиваться из-за того, как работают указатели в C ++.
Моя проблема в том, что когда я пытаюсь добавить новый узел в список, мой курсор ведет себя внеобычным образом, я объясню ниже:
РЕДАКТИРОВАТЬ: Хорошо, я изменил:
Node *cursor;
cursor = new Node
cursor = begin;
фиаско, но результатто же самое, после объявления курсора и начала обе точки указывают на одну и ту же ячейку памяти (что-то вроде: 0x32ce8).
/ EDIT
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;
}
Всегда, когда я отлаживаю, начало имеет похожую форму: 0x32ce02, когда я создаю свой «курсор», он имеет совершенно другую форму (также длиннее), но когда я делаю это: курсор = начало, тогда курсор становится чем-то вроде этого 0x32df02.
Однако проблема в том, что когда я добираюсь до «if (ap_nr ap_nr)», тогда по абсолютно невыполнимой причине курсор становится: 0x32ce02, а «cursor -> next = begin» обеспечивает бесконечный цикл.И независимо от того, сколько узлов я добавляю, это всегда происходит, поэтому всякий раз, когда я печатаю список, это бесконечный поток последнего добавленного узла.
Я делаю что-то не так?это декларация или размещение, создание?что-то?
Также, если у меня есть указатель * начать где-то в другом модуле, и с помощью этой функции я возвращаю новое начало ..., которое должно работать, верно?
PS Я также был бы признателенпростое встречное решение (еще один способ сделать это, если мой просто не годится)
Также я должен указать, как я составил свой список.Это просто простая связь узлов:
struct Node {
string type;
int ap_nr;
int sum;
Node *next;
};