Разделение связанного списка так много раз приводит к переполнению стека c ++ - PullRequest
0 голосов
/ 01 мая 2011

О дорогой;Кажется, я неправильно это понял.

Я хотел бы разделить односвязный список 10000 раз, но, очевидно, (и я не знал этого до того, как вы, ребята, помогли мне), это вызывает переполнение стека.

Я действительно новичок в этом, так есть ли способ, которым я все еще могу это сделать и не вызвать переполнение стека?Использование ссылок или что-то?

Вот метод:

Node* Node::Split()
{
    if(next == NULL)
    {
        return this;
    }
    Node *newNode = this->next;
    if(this->next != NULL)
    {

        this->next = newNode->next;
    }
    if(newNode->next != NULL)
    {
        newNode->next = newNode->next->Split();
    }
    return newNode;
}

Ответы [ 2 ]

1 голос
/ 01 мая 2011

Вы должны будете написать это как цикл, а не как рекурсивный вызов.Отслеживайте свою позицию в исходном списке, а также на обоих концах новых списков и добавляйте узлы попеременно к каждому списку.

0 голосов
/ 01 мая 2011

Убедитесь, что ваша рекурсия в какой-то момент остановилась (попробуйте небольшой набор данных).Если это произойдет, то у вас не возникнет проблем, и в следующий раз попросите ваш компилятор увеличить размер стека.Значение по умолчанию довольно мало (я думаю, что это один мегабайт на vc ++ 10).

...