Вот рабочая версия калькулятора без пользовательской операции: http://cpp.sh/7ckas
Теперь, если вы хотите, чтобы ваш пользователь выбрал операцию, вам нужно будет сделать еще одну работу. Вы не можете просто взломать его, используя '& amp; & amp;'. Вместо этого вам нужно создать какую-то абстракцию.
Например, вы можете спросить пользователя: «Выберите операцию: (1) плюс (2) минус». Затем пользователь вводит число, соответствующее требуемой операции.
Затем вы можете использовать оператор if на этом номере. Если 1, добавьте числа. Если 2, минус их.
Попробуйте сами и сообщите мне, если у вас возникнут проблемы с его работой.
Функция insert
здесь работает, потому что current_node.next = _node
является постоянной модификацией объекта в списке, на который указывает head
. После этого вызова, даже если current_node
собирать мусор (это просто временный указатель), у узла, на который он указывал в строке current_node.next = _node
, свойство .next
постоянно изменено.
Вот схема добавления нового узла 3
в список 1->2->nil
:
(before the `until` loop)
+---------+ +---------+
| data: 1 | | data: 2 |
| next: ----> | next: ----> [nil]
+---------+ +---------+
^ ^
| |
head current_node
(after the `until` loop; `current_node.next == nil`)
(and before `current_node.next = _node`)
+---------+ +---------+
| data: 1 | | data: 2 |
| next: ----> | next: ----> [nil]
+---------+ +---------+
^ ^
| |
head current_node
(after `current_node.next = _node`)
+---------+ +---------+ +---------+
| data: 1 | | data: 2 | | data: 3 |
| next: ----> | next: ----> | next: ----> [nil]
+---------+ +---------+ +---------+
^ ^
| |
head current_node
Кстати, этот метод insert
демонстрирует плохой дизайн; каждая вставка представляет собой O (n) линейную операцию времени, требующую обхода всего списка. Улучшенный дизайн класса LinkedList
будет предлагать указатель tail
, позволяющий O (1) вставлять постоянное время в конец списка. С другой стороны, класс может предложить add_front()
без хвостового указателя, который установит new_head.next = old_head
и head = new_head
.