Если вы этого не сделали, вам лучше определить функцию length(), поэтому заданный один связанный список вы можете узнать, сколько у него узлов.
Благодаря ответу Cereal_Killer на предыдущую версию этого ответа, я заметил, что список - это, во-первых, единственный связанный список, и вам просто нужно связать средний узел как с следующим узлом, так и с предыдущим узел.
Теперь я предполагаю, что вы определили две структуры (Struct, Class или что-то другое в зависимости от языка, который вы используете). Итак, скажем, у вас есть Node_s
, определяемый как узел с указателем next
, и Node_d
с next
и указателем prev
. (Node_d
может наследовать от Node_s
, поэтому вам нужно добавить атрибут prev
в дочернем классе). Зная это, приведенный выше код должен делать то, что вам нужно:
функция do_it (my_LinkedList LinkedList) {
int i_middle;
int length = linkedList.length();
if ((length ÷ 2) != 0) i_middle = length/2;
else return -1;
Node_s aux = linkedList.first();
int index = 0;
Node_d middle= null;
while (aux != null) {
if (index == i_middle - 1){ //now aux is the middle's previous node
middle.data = aux.next.data; //aux.next is the middle singly node, we assignate the data to the new double linked node
middle.prev = aux; //as we said, aux is the prev to the middle
midle.next = aux.next.next; //so aux.next.next is the next to the middle
print(what you need to print);
}else {
print("Node " + index " next: "+ aux.next);
}//end if
index++;
aux = aux.next;
} //end while
}//end function
Этот предыдущий код должен делать то, что вам нужно. Я написал ответ в каком-то псевдо-Java-коде, поэтому, если вы не знакомы с Java или не понимаете, что делает мой псевдо-код, сообщите мне. Во всяком случае, идея моего кода может представлять некоторые проблемы в зависимости от языка, с которым вы работаете, поэтому вам придется его адаптировать.
Обратите внимание, что в конце выполнения этой программы ваша структура данных не будет односвязным списком, а не двойной, так как у вас будут linkedList.length() - 1
узлы, соединенные знаковым образом, но средние будет иметь две ссылки.
Надеюсь, это поможет.
В случае, если не 'пред (3)' = 2? –
может указывать на любой узел. но он попросил меня направить средний узел до первого узла. –
Хорошо, и я не уверен, что означает «использование интерфейса», потому что вам нужно будет изменить объект узла в списке, чтобы иметь любую другую структуру, чем одну ссылку ... –