Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将Listnode序列转换为两个独立的列表_C#_Linked List - Fatal编程技术网

C# 如何将Listnode序列转换为两个独立的列表

C# 如何将Listnode序列转换为两个独立的列表,c#,linked-list,C#,Linked List,我有一系列listnode对象 列表->[1]->[2]->[3]->[4]/ 我需要把它转换成两个独立的列表 列表->[4]->[2]/ 列表2->[3}->[1]/ 我甚至不知道从哪里开始。我一直在玩弄我的_list.AddLast()和我的_list.Remove()但我不确定如何将一个列表创建为2,然后按指示移动数字。根据我上面的评论,这里有一个答案。我接受您的输入,将其转换为数组,然后向后迭代数组(从末尾到开头)。我将数组中的奇数项放入一个列表中,将偶数项放入另一个列表中。然后将两个列

我有一系列listnode对象

列表->[1]->[2]->[3]->[4]/

我需要把它转换成两个独立的列表

列表->[4]->[2]/ 列表2->[3}->[1]/


我甚至不知道从哪里开始。我一直在玩弄我的_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);