Решение такой проблемы состоит из 3 частей.
- Разбейте проблему на более мелкие, более простые задачи, облегчающие решение
- Выполните меньшие задачи
- Используйте их для решения большой проблемы.
Что облегчит решение этой проблемы? Добавление одного значения в список проще, чем добавление нескольких значений в список, поэтому давайте напишем для этого функцию.
Чтобы добавить одно значение в начале списка,
- Мы можем создать новый узел с этим значением
- У нас есть новый узел, указывающий на текущийпервый узел
- Мы устанавливаем текущий первый узел на новый узел.
Давайте назовем нашу функцию prepend
, так как она добавляет значение в список.
class NodeList {
public:
// The head should be set to null initially
NodeList()
: m_head(nullptr)
{
}
// This function takes a value and adds it to the beginning of the list
void prepend(const DataType& value) {
// The new node uses the current head as the next value
Node* newNode = new Node(value, m_head);
// We set the current head to the new node.
m_head = newNode;
}
Теперь добавить значение несколько раз просто.Мы можем просто вызывать prepend один раз для каждого добавляемого элемента.
class NodeList {
public:
// The head should be set to null initially
NodeList()
: m_head(nullptr)
{
}
// This function takes a value and adds it to the beginning of the list
void prepend(const DataType& value) {
// The new node uses the current head as the next value
Node* newNode = new Node(value, m_head);
// We set the current head to the new node.
m_head = newNode;
}
NodeList(size_t count, const DataType& value)
: m_head(nullptr) // The head still has to be null initially
{
for(size_t i = 0; i < count; i++)
{
prepend(value);
}
}
};