据我所知,你可以这样做:

  • 查找要删除的节点。
  • node.previous.next = node.next
  • node.next.previous = node.previous
  • node.previous = null
  • node.next = null
  • 处理节点,如果你在
    非 GC 环境

  • 如果您的列表是双向链接。

    但是你如何使用单个链表来做到这一点?
    我尝试了很多东西,但无济于事:(
    我只是让它删除一个特定的索引,或者它什么都不做

    最佳答案

    从列表的开头开始。维护对当前项 ( currentItem ) 和前一项 ( previousItem ) 的引用。始终使用 previousItem = currentItem, currentItem = currentItem.Next 线性搜索要删除的项目。如果要删除的项目是列表的头部,请将列表的头部重新分配给 currentItem.Next 。否则,设置 previousItem.Next = currentItem.Next 。如有必要(如您所说,在非 GC 环境中)处理 currentItem

    基本上,您使用 previousItem 来模拟 currentItem.Previous 在双向链表的情况下的行为。

    编辑:这是 Delete 的正确实现:

    public void Delete(int rangeStart, int rangeEnd) {
        Node previousNode = null, currentNode = Head;
        while (currentNode != null) {
            if (currentNode.Data >= rangeStart && currentNode.Data <= rangeEnd) {
                if (previousNode == null) {
                    Initial = currentNode.Next;
                }
                else {
                    previousNode.Next = currentNode.Next;
                }
            }
            else {
                previousNode = currentNode;
            }
            currentNode = currentNode.Next;
        }
    }
    

    关于c# - 从单个链接列表中删除节点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1432818/

    10-10 06:45