Удаление элемента из односвязного списка путём смещения

Есть 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


Ответы (0 шт):