【问题标题】:Linked List Class in MATLAB - Insert node manually without insertAfter()MATLAB 中的链表类 - 无需 insertAfter() 手动插入节点
【发布时间】:2014-06-21 08:03:29
【问题描述】:

我正在尝试在 MATLAB 中使用 Linked List Class 实现。
现在,它说将节点插入列表的唯一方法是使用insertBefore()insertAfter()
但我想手动插入节点,通过指定新节点的Next 值,如

newnode = dlnode(new);
ptr.Next = newnode;
newnode.Next=ptrnxt;

这行得通吗?我不能在我的特定应用程序中使用insertBefore()insertAfter(),因为我没有维护当前节点的指针。

有关链表类的详细信息,请参见here

【问题讨论】:

    标签: algorithm matlab linked-list doubly-linked-list


    【解决方案1】:

    不,我认为这不适用于这三行代码,因为它忽略了为确保 NextPrev 设置为 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
    

    使用insertAfterinsertBefore 方法更容易、更安全。

    【讨论】:

    • 我相信你是对的。我对底层代码的理解有点不清楚。现在实现就好了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2019-04-26
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多