Класс связанного списка в MATLAB — Вставить узел вручную без insertAfter()

#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. Я считаю, что вы правы. Я был немного неясен в своем понимании базового кода. Теперь реализация просто великолепна!