我只需要在C#中使用链接列表提供一些帮助,C ++中的链接列表有点容易使用指针但我在C#中面临一些问题 我阅读了http://msdn.microsoft.com上提供的示例,但我无法弄清楚如何链接两个不同的链接列表
效率方式似乎将LinkedListNode放入链表中,所以假设我有两个链表
LinkedList L1 = new LinkedList(); LinkedList L2 = new LinkedList(); 然后让我说我有以下节点
LinkedListNode<String> Ln1 = new LinkedListNode<String>("Orange");
LinkedListNode<String> Ln2 = new LinkedListNode<String>("Banana");
LinkedListNode<String> Ln3 = new LinkedListNode<String>("Apple");
LinkedListNode<String> Ln4 = new LinkedListNode<String>("Strawberry");
我只是将它们添加到我拥有的列表中:
L1.AddLast(Ln1);
L1.AddLast(Ln2);
L2.AddLast(Ln3);
L2.AddLast(Ln4);
好了,现在让我说我想把L1的最后一个元素链接到L2中的第一个元素,这可能吗? 我先试了一下:
L1.Last.Next = L2.First; 我完全失败了一个错误:属性或索引器&#39; System.Collections.Generic.LinkedListNode&amp; amp; lt; string&gt; .Next&#39;无法分配 - 它是只读的
好吧,我试过这个:
Ln2.Next = Ln3;
我又失败了
我的最后一次尝试是
LinkedListNode<String> node1=L1.Last;
LinkedListNode<String> node2 = L2.First;
node1.Next = node2;
出现错误:属性或索引器&#39; System.Collections.Generic.LinkedListNode&amp; amp; lt; string&gt; .Next&#39;无法分配 - 它是只读的
所以请帮忙吗?如何链接他们?
另外一个问题: 是否可以通过其索引来到达链表中的元素?例如?
我推出了这个简单的算法,它可以工作:
int i = 0;
foreach (var item in L2)
{
Console.WriteLine(item);
i++;
}
有自动方式吗?
谢谢你的帮助
答案 0 :(得分:2)
LinkedListNode具有属性List。此属性指向列表,属于哪个节点。将节点添加到某个列表时,将设置此属性。因此,一次节点只能属于一个列表。这意味着您应该从一个列表中删除节点,然后再将其添加到另一个列表中:
var node = L2.First;
L2.RemoveFirst();
L1.AddLast(node);
如果要从L2添加所有节点,可以使用:
while (L2.Count > 0)
{
var node = L2.First;
L2.RemoveFirst();
L1.AddLast(node);
}
请记住,它会从L2中删除所有节点。
另一个选项 - 创建具有相同值的新节点:
foreach (string value in L2)
L1.AddLast(value);
更新:如果您想通过索引到达链接列表中的元素,您可以跳过前N个项目,然后选择下一个项目:
L1.Skip(index).First()
与任何集合一样,您应该验证该列表至少有N-1个节点。
答案 1 :(得分:1)
回答第一个问题,将L1的最后一个元素链接到L2的第一个元素
L2.AddFirst(L1.Last.Value);
答案 2 :(得分:1)