Это отличное место для рисования картинок!
Представьте, что у нас есть связанный список, на который указывает head
:
head
|
v
+------+ +-----+ +-----+ +-----+
| i'm | -> | the | -> | bad | -> | guy | -> null
+------+ +-----+ +-----+ +-----+
Если мы используем строку кода
Node *current = new Node;
тогда память выглядит так:
head current
| |
v v
+------+ +-----+ +-----+ +-----+ +------+
| i'm | -> | the | -> | bad | -> | guy | -> null | duh! | -> ?
+------+ +-----+ +-----+ +-----+ +------+
Цель функции - напечатать существующий список, на который указывает head
, но здесь у нас есть указатель на новый ячейка связанного списка, которая не является частью существующего списка. В результате мы совершили два греха программирования:
- Мы выделили память для ненужного нам объекта.
- Мы нарушили договор, с которым заключили клиент.
С другой стороны, если мы напишем
Node *current = head;
, то память будет выглядеть так:
head
|
v
+------+ +-----+ +-----+ +-----+
| i'm | -> | the | -> | bad | -> | guy | -> null
+------+ +-----+ +-----+ +-----+
^
|
current
Здесь current
есть теперь указываем на существующий список, чтобы мы могли просмотреть список и найти то, что нам нужно. Здесь не нужно создавать новые узлы, поэтому мы не создаем никаких новых узлов.
Вообще говоря, в C ++ вам следует избегать использования new
, если вы действительно не хотите создавать новую ячейку связанного списка. В этом случае мы не хотим этого делать, поэтому мы создаем current
и указываем на существующую ячейку связанного списка.
Надеюсь, это поможет!