Я новичок в Голанге, пытаюсь реализовать в нем некоторые структуры данных и алгоритмы,
Я написал функцию go, которая добавляет данные в список, но по какой-то причине она переходит в бесконечный цикл. Я уже пробовал различные подходы, но безрезультатно, а также в конечном итоге я искал реальный код для связанного списка в Интернете и нашел разные реализации, но все они застревают на одном месте,
// linked-list.go
type Node struct {
data int
next *Node
}
type LinkedList struct {
head *Node
}
func (ll *LinkedList) Add(value int) {
node := &Node{
data: value,
}
if ll.head == nil {
ll.head = node
}
curr := ll.head
for curr.next != nil { // this is where the code gets stuck
curr = curr.next // this is not pointing it to the next node
}
curr.next = node
}
// main.go
func main() {
ll := modules.LinkedList{}
ll.Print()
ll.Add(1)
ll.Add(2)
ll.Print()
}
Некоторые из кодов, которые я пробовал из Интернета
Да, у меня есть, и он практически никогда не переназначает curr на curr.next, что приводит к бесконечному циклу.
Совет на будущее: с помощью fmt.Printf вы можете печатать адреса указателей, используя %p. Это позволило мне обнаружить несколько неприятных проблем, которые было трудно обнаружить, просто взглянув на окно отладчика. В этом случае вы могли заметить, что узел и следующий узел имели бы один и тот же адрес - адрес головы, которая могла вызвать падение пенни. Отладчики — это здорово, но иногда лучшим другом может оказаться просто старое доброе ведение журнала в консоли.
return
в состоянии if, когда ll.head == nil
. В настоящее время последняя строка функции присваивает head
как head.next
, создавая таким образом циклический связанный список, который никогда не закончится.
Эй, извини, это была ошибка новичка, оператор return
исправил весь поток. Спасибо чувак. :)
Да, принимаю, там говорится, что мне нужно подождать 2 минуты, прежде чем принять
Пробовали ли вы отладку, чтобы остановить выполнение и изучить его? В зависимости от вашей IDE вы можете найти довольно простые инструкции для запуска точек останова и прохождения вашего алгоритма.