C#在现有LinkedList <T>中添加新项目的最佳方法?

2 c# linked-list list

我试图在现有的链表中添加新的电影名称,但收到错误.

cannot convert from 'string' to 'System.Collections.Generic.LinkedListNode<string>'
Run Code Online (Sandbox Code Playgroud)

这是我正在处理的代码:

 LinkedList<string>  movies = new LinkedList<string>();
       movies.AddLast("Fire & Dew");
       movies.AddLast("Hang Break");
       movies.AddLast("Naughty Monkey");
       movies.AddLast("Sabotage");  

     //Add movie name Good & Bad After Hang Break
     movies.AddAfter("Hang Break", "Good & Bad");

        foreach (string movie in movies)
       {
           Console.WriteLine(movie);
       }    
Run Code Online (Sandbox Code Playgroud)

任何解决方案和代码提示?

Wil*_*sem 6

那么该类型签名AddAfter是:

public LinkedListNode<T> AddAfter(LinkedListNode<T> node, T value)
Run Code Online (Sandbox Code Playgroud)

所以第一个参数node应该是a LinkedListNode<T>.您可以获取该节点,因为它是从AddLast方法返回的:

movies.AddLast("Fire & Dew");
var hang_break = movies.AddLast("Hang Break");
movies.AddLast("Naughty Monkey");
movies.AddLast("Sabotage");  

//Add movie name Good & Bad After Hang Break
movies.AddAfter(hang_break, "Good & Bad");
Run Code Online (Sandbox Code Playgroud)

csharp交互式shell中评估此代码后,我们获得:

csharp> movies
{ "Fire & Dew", "Hang Break", "Good & Bad", "Naughty Monkey", "Sabotage" }
Run Code Online (Sandbox Code Playgroud)

这是必要的原因是因为这样的链表允许在O(1)中给定节点旁边插入,因为它修改了下一个节点和前一个节点的引用.这可以完成,因为它只需要改变给定节点和给定节点旁边的节点.但是,如果您首先需要搜索节点,则算法为O(n),因此链表的性能优势将会丢失.