C# 如何将Listnode序列转换为两个独立的列表
我有一系列listnode对象 列表->[1]->[2]->[3]->[4]/ 我需要把它转换成两个独立的列表 列表->[4]->[2]/ 列表2->[3}->[1]/C# 如何将Listnode序列转换为两个独立的列表,c#,linked-list,C#,Linked List,我有一系列listnode对象 列表->[1]->[2]->[3]->[4]/ 我需要把它转换成两个独立的列表 列表->[4]->[2]/ 列表2->[3}->[1]/ 我甚至不知道从哪里开始。我一直在玩弄我的_list.AddLast()和我的_list.Remove()但我不确定如何将一个列表创建为2,然后按指示移动数字。根据我上面的评论,这里有一个答案。我接受您的输入,将其转换为数组,然后向后迭代数组(从末尾到开头)。我将数组中的奇数项放入一个列表中,将偶数项放入另一个列表中。然后将两个列
我甚至不知道从哪里开始。我一直在玩弄我的_list.AddLast()和我的_list.Remove()但我不确定如何将一个列表创建为2,然后按指示移动数字。根据我上面的评论,这里有一个答案。我接受您的输入,将其转换为数组,然后向后迭代数组(从末尾到开头)。我将数组中的奇数项放入一个列表中,将偶数项放入另一个列表中。然后将两个列表作为元组返回:
private (List<T>, List<T>) SplitList<T>(IEnumerable<T> input)
{
var asArray = input.ToArray();
var evens = new List<T>();
var odds = new List<T>();
for (var i = asArray.Length - 1; i >= 0; --i)
{
if (i % 2 == 0) //if even
{
evens.Add(asArray[i]);
}
else
{
odds.Add(asArray[i]);
}
}
return (evens, odds);
}
有些人可能会说“为什么不向后索引列表呢?”是的,
list
是通过数组内部实现的,并且是可索引的。但是,在我看来,列表是用于索引的O(N)
(而不是像数组一样O(1)
);可索引只是一个实现细节。列表是如何声明的?典型的列表
不会公开任何类似“listnode”的内容。如果它是普通列表,请将其转换为数组(.ToArray
)然后在数组中反向迭代,将偶数项粘贴在一个列表中,将奇数项粘贴在另一个列表中。您应该提供一个最小且完整的可复制示例,并尝试对您的问题进行更具体的说明。您想要一个具体的或随机的拆分和顺序吗?我正在寻找上述specefic拆分/顺序。
var oneToFour = Enumerable.Range(1, 4);
var result = SplitList(oneToFour);
var oneToFifteen = Enumerable.Range(1, 15);
var other = SplitList(oneToFifteen);