C#LinkedList<>按索引删除

时间:2017-09-18 14:46:24

标签: c# linked-list

鉴于:

LinkedList<int> myList;

如何删除index n处的元素?我似乎无法找到任何方法,只能通过值删除这些方法,因为此特定列表可能具有重复值。

EG:

myList.removeAt(n);

1 个答案:

答案 0 :(得分:0)

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

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

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();
    }
}