Удаление элемента из односвязного списка путём смещения
Есть struct следующего вида:
type ListNode struct {
Val int
Next *ListNode
}
В него записаны следующие данные:
0xc000104220&{1 0xc000104230}
0xc000104230&{2 0xc000104240}
0xc000104240&{3 0xc000104250}
0xc000104250&{3 <nil>}
DeleteDuplicates сравнивает между собой все элементы массива по полю Val и если находит похожие должен сдвинуть цепочку на месте дубликата.
func (ln *ListNode) DeleteDuplicates() {
LOOP:
for e1 := ln; e1 != nil; e1 = e1.Next {
for e2 := e1.Next; e2 != nil; e2 = e2.Next {
if e1.Val == e2.Val {
e1 = e1.Next //Должен перезаписывать ln
goto LOOP
}
}
}
}
В моём представлении e1 должен затереться ссылкой e1.Next, и всё это должно отражается на ln, так как e1 содержит ссылку на элемент ln, но вместо этого просто меняется значение e1. Скорее всего, я неправильно использую переменные со ссылкой, так как если написать в грубую ln.Next = ln.Next.Next это сработает.
Код на goplay если нужно: https://goplay.space/#CYWdOSI3DLM