【问题标题】:C# LinkedList<> remove by indexC# LinkedList<> 按索引删除
【发布时间】:2017-09-18 14:46:23
【问题描述】:

给定一个:

LinkedList<int> myList;

如何删除index n 的元素?我似乎找不到任何方法,只有按值删除的方法不好,因为这个特定列表可能有重复值。

EG:

myList.removeAt(n);

【问题讨论】:

  • 这基本上就是告诉你不应该使用 LinkedList 的方式。请改用列表。
  • @HansPassant 理解,但在这个列表中我需要能够随意移动项目 - 我认为链表为此提供了更好的性能。
  • @RandRandom 嘿,一直在学习 - 认为 LinkedList 数据结构专门用于提供比数组支持的数据结构更好的随机混排项目性能
  • 添加和删除速度更快,但查找特定索引时速度较慢。
  • 链接列表可以更有效地删除您已经引用(或位于头部)的节点。按索引移动节点效率低下。

标签: c# linked-list


【解决方案1】:

如果您要添加或删除已有引用的节点,则链表在速度方面具有很大优势,但是当您没有引用时,您可以做的最好的就是将列表走到索引处,抓住节点,然后删除它。

这是一个执行该过程的扩展方法。它会返回对已删除节点的引用,以防您希望稍后将其插入到其他列表中,或者您正在移动它在列表中的位置。

public static class ExtensionMethods
{
    public static LinkedListNode<T> RemoveAt<T>(this LinkedList<T> list, int index)
    {
        LinkedListNode<T> currentNode = list.First;
        for (int i = 0; i <= index && currentNode != null; i++)
        {
            if (i != index)
            {
                currentNode = currentNode.Next;
                continue;
            }

            list.Remove(currentNode);
            return currentNode;
        }

        throw new IndexOutOfRangeException();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多