我只需要一些关于 C# 中链接列表的帮助,C++ 中的链接列表使用指针有点容易,但我在 C# 中面临一些问题我阅读了 http://msdn.microsoft.com 上提供的示例,但我不知道如何链接两个不同的链表
有效的方法似乎是将 LinkedListNode 放入链表中,所以假设我有两个链表
LinkedListL1 = 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.上一页。下一页 = L2。第一;我完全失败了,出现错误:属性或索引器"系统.集合.通用.链接列表节点<字符串>。Next' 不能分配给 -- 它是只读的
好吧,我试过了:
Ln2.Next = Ln3;
我又失败了
我的最后一次尝试是
LinkedListNode<String> node1=L1.Last;
LinkedListNode<String> node2 = L2.First;
node1.Next = node2;
错误:P roperty 或索引器"系统.集合.通用.链接列表节点<字符串>。Next' 不能分配给 -- 它是只读的
所以请帮忙吗? 如何链接它们?
一个补充问题:例如,是否可以通过其索引访问链表中的元素?
我提出了这个简单的算法,它有效:
int i = 0;
foreach (var item in L2)
{
Console.WriteLine(item);
i++;
}
有没有自动的方法?
谢谢你的帮助
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 个节点。
回答您的第一个问题,将 L1 的最后一个元素链接到 L2 的第一个元素
L2.AddFirst(L1.Last.Value);