我正在尝试在现有链接列表中添加新电影名称,但却出错。
cannot convert from 'string' to 'System.Collections.Generic.LinkedListNode<string>'
以下是我正在处理的代码:
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);
}
任何解决方案和代码提示?
答案 0 :(得分:6)
AddAfter
的类型签名是:
public LinkedListNode<T> AddAfter(LinkedListNode<T> node, T value)
因此第一个参数node
应为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");
在我们在csharp
交互式shell中评估此代码之后,我们获得了:
csharp> movies
{ "Fire & Dew", "Hang Break", "Good & Bad", "Naughty Monkey", "Sabotage" }
这是必要的原因是因为这样的链接列表允许在 O(1)中的给定节点旁边插入,因为它修改了下一个和上一个的引用节点。这可以完成,因为它只需要改变给定节点和给定节点旁边的节点。但是,如果您首先需要搜索节点,那么算法 O(n),因此链表的性能优势将会丢失。