当前位置:  开发笔记 > 编程语言 > 正文

C# - LinkedList - 如何删除指定节点后的所有节点?

如何解决《C#-LinkedList-如何删除指定节点后的所有节点?》经验,为你挑选了2个好方法。

我正在实现一个带有通用LinkedList的undo/redo缓冲区.

在这种状态下:
[Top]
state4(撤消)
state3(撤消)
state2 < - 当前状态
state1
[bottom]

当我执行Push时,我想删除当前状态之后的所有状态,并推送新状态.

我目前的旁路是做,while (currentState != list.last), list.removeLast();但它很糟糕

LinkedList只支持Remove,RemoveFirst和removeLast ...

我想要像RemoveAllNodesAfter(LinkedListNode ...)这样的东西?

如何在不迭代所有节点的情况下很好地编码?也许有扩展?...



1> Jon Skeet..:

我在标准中看不到任何LinkedList可以让你这样做的东西.如果需要,您可以查看PowerCollections和C5集合 - 或者只是滚动您自己的LinkedList类型.它是要实现的更简单的集合之一,特别是如果您可以"及时"方式添加功能.



2> angry person..:

如果我自己实现这个,我会选择一种不同的方式来实现它.

而不是.RemoveAllNodesAfter(node)方法,我会选择创建一个.SplitAfter(node)方法,返回一个新的链表,从下一个节点开始node.这将成为一种更方便的工具,而不仅仅是能够切断尾部.如果你想要你的RemoveAllNodesAfter方法,它只需要在SplitAfter内部调用方法并丢弃结果.

天真的实施:

public LinkedList SplitAfter(Node node)
{
    Node nextNode = node.Next;

    // break the chain
    node.Next = null;
    nextNode.Previous = null;

    return new LinkedList(nextNode);
}

public void RemoveAllNodesAfter(Node node)
{
    SplitAfter(node);
}

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有