Для назначения мне нужно добавить один связанный список объектов в конец другого. У меня есть это:Как вставить один связанный список за другим?
WORD you("you");//where you's linked list now contains y o u
WORD are("are");//where are's linked list now contains a r e
, и я хочу сделать это:
you.Insert(are,543);//(anything greater they the current objects length is
//attached to the back. So that 543 can be anything > you's length
так вот, вы это связано связный список должен содержать:
y o u a r e
я смог вставить в передней , и где угодно между буквами, но когда я пытаюсь вставить обратно, программа сработает мгновенно. Может кто-нибудь, пожалуйста, помогите мне выяснить, что не так? Я попытался использовать отладчик, и он указывает на одну строку, но я не могу понять, что не так. Я пометил линии в ближайшие функции:
void WORD::Insert(WORD & w, int pos)
{
if(!w.IsEmpty())
{
alpha_numeric *r = w.Cpy();
alpha_numeric *loc;
(*this).Traverse(loc,pos);//pasing Traverse a pointer to a node and the position in the list
//if(loc == 0)
//{
// alpha_numeric *k = r;//k is pointing to the begin. of the copied words list
// while(k -> next != 0)
// {
// k = k -> next;//k goes to the back
// }
// k -> next = front;//k(the back) is now the front of *this
// front = r;//front now points to r, the copy
//}
else if(loc == back)
{
back -> next = r; //<<<-------DEBUGGER SAYS ERROR HERE?
length += w.Length();
while(back -> next!= 0)
{
back = back -> next;
}
}
/*else
{
alpha_numeric *l = r;
while(l -> next != 0)
{
l = l -> next;
}
l -> next = loc -> next;
loc -> next = r;
}
length += w.Length();
}*/
}
Кроме того, здесь есть функция Traverse я, если это помогает
void WORD::Traverse(alpha_numeric * & p, const int & pos)
{
if(pos <= 1)
{
p = 0;
}
else if(pos > (*this).Length())
{
p = back;
}
else
{
p = front;
for(int i = 1; i < pos - 1; i++)
{
p = p -> next;
}
}
}
I ОБЪЯВЛЕН НАЗАД КАК POINTER В приватной секции КЛАССА. * Назад
Это, как я положил его в конструктор
WORD::WORD()
{
alpha_numeric *p;
front = new alpha_numeric;
front = 0;
length = 0;
back = front;
for(p = front; p != 0; p = p -> next)
{
back = back -> next;
}
}
Мы не видели весь ваш код, но очевидный вывод состоит в том, что 'back' не указывает на действительный объект' alpha_numeric'; вместо этого это 0 или мусор. –
Я не замечаю, что 'back' находится в сфере видимости. Это не глобальная переменная, не так ли? (Вероятно, этого не должно быть.) – thb
@ ErnestFriedman-Hill больной пост больше, я объявил его как указатель в частном разделе класса. плохой пост, как я положил его в конструкторе – Mike