#algorithm #matlab #linked-list #doubly-linked-list
#алгоритм #matlab #связанный список #дважды связанный список
Вопрос:
Я пытаюсь использовать реализацию класса связанного списка в MATLAB.
Теперь в нем говорится, что единственный способ вставить узел в список — использовать insertBefore()
или insertAfter()
.
Но я хочу вставить узел вручную, указав Next
значение нового узла, например
newnode = dlnode(new);
ptr.Next = newnode;
newnode.Next=ptrnxt;
Будет ли это работать? Я не могу использовать insertBefore()
or insertAfter()
в моем конкретном приложении, поскольку я не поддерживаю указатель на текущий узел.
Подробная информация о классе связанного списка приведена здесь .
Ответ №1:
Нет, я не думаю, что это будет работать только с этими тремя строками кода, потому что он игнорирует всю остальную логику, которая возникает, чтобы убедиться, что Next
для и Prev
установлены newnode
, и игнорирует обновление ptrnxt
, которое должно произойти, чтобы оно Prev
было сейчас newnode
. (И Next
свойство является частным, поэтому вам придется изменить его на общедоступный …)
Неясно, что вы имеете в виду, я не могу использовать insertBefore() или insertAfter() в моем конкретном приложении, поскольку я не поддерживаю указатель текущего узла. Тем не менее, у вас есть узлы, между которыми вы хотите вставить newnode
? Я предполагаю, что порядок ваших узлов (до вставки нового) таков …,ptr,ptrnxt,…
. Тогда почему бы просто не использовать
newnode.insertAfter(ptr);
что изменило бы порядок на …,ptr,newnode,ptrnxt,…
и все три свойства для каждого узла были бы установлены правильно / автоматически.
В противном случае вам придется изменить свой код на что-то вроде
newnode = dlnode(new);
ptr.Next = newnode;
newnode.Prev = ptr; % to make sure that newnode points back to ptr
newnode.Next = ptrnxt;
ptrnxt.Prev = newnode; % to make sure that ptrnxt points back to newnode
Гораздо проще и безопаснее использовать методы insertAfter
and insertBefore
.
Комментарии:
1. Я считаю, что вы правы. Я был немного неясен в своем понимании базового кода. Теперь реализация просто великолепна!