Вам также необходимо обновить узлы, которые находятся рядом с заменяемыми 2
Например, рассмотрите этот список:
first -> a -> b -> c
Если вы хотите поменять местами сначала и b, то вы также должны обновить ссылки a и c на следующую и предыдущую ссылки.
Редактировать: этот код должен быть помещен перед вашим кодом, который выполняет своп, и сразу после логического объявления
Edit2: Кроме того, если у вас есть ссылки на начало / конец списка, вам также необходимо обновить их.Я не вижу, чтобы вы указывали на голову или хвост где-либо в вашем коде.
if(toStartFrom.prev != null)
{
toStartFrom.prev.next = b;
}
if(toStartFrom.next != b) // Equivalent to NextToEachOther
{
toStartFrom.next.prev = b;
}
if(b.next != null)
{
b.next.prev = toStartFrom;
}
if(b.prev != toStartFrom) // Equivalent to NextToEachOther
{
b.prev.next = toStartFrom
}