通过索引从单个链表中删除

本文关键字:链表 删除 单个 索引 | 更新日期: 2023-09-27 18:33:40

如何在不使用尾巴的情况下通过索引插入到通用链表。

public void RemoveByIndex(int index)
{
    int count = 0;
    LinkedListNode<T> current = Head;
    while (count <= index)
    {
        if (count == index)
        {
            current.Next = null;
        }
        else
        {
            current = current.Next;
        }
        count++;
    }
    Head = current;
}

我有包含数据 5、10、15 的 int 列表数组。而且我不知道为什么当我给他第一个索引时,它总是删除我 5,15。

通过索引从单个链表中删除

第一次迭代(计数 = 0)=> else块执行 => current = current.next => 当前 = 10,当前.下一个 = 15

第二次迭代 (count=1) => if 块被执行 => current.next = null => 15 被删除 => 当前 = 10

在第二次迭代结束时,计数 = 2 并退出 while 循环 => Head = current => 头 = 10 => 删除 5

可能的解决方案:

public void RemoveByIndex(int index)
{
   int count = 0;
   LinkedListNode<T> current = Head;
   LinkedListNode<T> previous = current;
   while (count <= index)
   {
       if (count == index)
       {
           previous.next = current.next               
           current = null;               
       }
       else
       {
           previous = current;
           current = current.Next;
       }           
       count++;
   }       
} 
var list1 = new LinkedList<int>();
var nodesToRemove = list1.Where(x => x == index).ToList();
foreach(var node in nodesToRemove)
        lis1.Remove(node);