*node = *n
Эта строка не делает то, что вы думаете, что делает. Вы, вероятно, надеялись, что это изменит внешний *Node
, чтобы он указывал на новую голову (старый хвост), да? Ну нет, он просто заменяет узел в этом месте. Что объясняет, почему отсутствует первое первое значение.
Итак, перед этим последним шагом у вас есть что-то вроде этого
nil <- 3 <=> 2 <=> 1 -> nil
↑ ↑
n node, myListAddress
Затем вы заменяете node
значением n
(которое составляет nil <- 3 -> 2
). Это делает структуру похожей на это:
prev
┌────────────────┐
│ │ node, myListAddress
˅ │╱
nil <- 3 <=> 2 -> 3 ──┐
^ │next
└────────┘
Кстати, этот список настолько мал, что эта диаграмма может вводить в заблуждение. Вот как это выглядит с большим количеством элементов:
prev
┌────────────────────────────┐
│ │ node, myListAddress
˅ │╱
nil <- 5 <=> 4 <=> 3 <=> 2 -> 5 ──┐
^ │next
└────────────────────┘
Вы можете использовать **Node
там. Или просто верните новую голову из функции:
func ReverseList(node *Node) *Node {
for n := node; n != nil; n = n.previous {
if n.next == nil {
n.next = n.previous
n.previous = nil
return n
} else {
n.next, n.previous = n.previous, n.next
}
}
return node
}
Тогда
myListAddress = ReverseList(myListAddress)