Задать вопрос

Почему указатель не меняет другой указатель в golang?

func (t *Tree) Delete(value int) bool {

	if t.Search(value) {
		currentNode := t.root

		for currentNode != nil {
			if value == currentNode.value {
				if currentNode.left == nil && currentNode.right == nil {
					currentNode = nil
					return true
				}
			} else if value < currentNode.value {
				currentNode = currentNode.left
			} else {
				currentNode = currentNode.right
			}
		}
	}

	return false
}

Есть такая функция для удаления элемента в бинарном дереве(она недописанная и удаляет элемент только в том случае, если у удаляемого элемента нет потомков). Рассмотрим случай, когда у нас в дереве есть только root: В функции currentNode , в таком случае, будет указывать на root, но при присвоении currentNode = nil - root не изменяется. Почему так происходит?
  • Вопрос задан
  • 147 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
currentNode — это переменная, существующая только в этой функции. Это указатель, вы присваиваете ему какое-то значение, а потом присваиваете ему nil. От этого ранее присвоенный объект не изменится, ибо вы меняете только указатель на этот объект.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы