如何打印两个链表程序
How to print two Linked List program
请帮助我,我尝试使用两个链接列表,因为我希望结果就像我的 2 数组元素一样。这是我的代码
class Program
{
int[] info = { 74, 90, 80, 63 };
int[] link = { 2, 6, 0, 3 };
static void Main(string[] args)
{
Program newProgram = new StrukturData.Program();
newProgram.Node();
Console.ReadLine();
}
public void Node()
{
LinkedList<int> infoList = new LinkedList<int>(info);
LinkedList<int> linkList = new LinkedList<int>(link);
foreach (var item in infoList)
{
Console.Write(item + " ");
foreach (var back in linkList)
{
Console.Write(back + " ");
}
}
}
}
输出
74 2 6 0 3 90 2 6 0 3 80 2 6 0 3 63 2 6 0 3
我的预期
74 2 90 6 80 0 63 3
我认为问题出在我的 foreach 语句中。对不起,我的英语不好,所以我不能说太多:(,但我希望你们能帮助我得到我期望的结果:)
你的循环应该是这样的
int[] info = { 74, 90, 80, 63 };
int[] link = { 2, 6, 0, 3 };
for(int i = 0; i < Math.Min(info.Length, link.Length); i++)
{
Console.Write(info[i] + " ");
Console.Write(link[i] + " ");
}
如果 2 个数组的大小相同,则之前的解决方案有效。
这是新循环:
int max = Math.Max(infoList.Count,linkList.Count);
for (int i = 0; i < max; i++)
{
if (i < infoList.Count)
Console.Write(infoList.ElementAt(i) + " ");
if (i < linkList.Count)
Console.Write(linkList.ElementAt(i) + " ");
}
如果您正在寻找通用解决方案(虽然可能很复杂),请查看
我的答案适用于 any IEnumerable<T>
(包括 LinkedList<int>
、int[]
)输入:
public void Node() {
Console.Write(string.Join(" ", Merge(info, link)));
}
或者如果你坚持LinkedList<T>
:
public void Node() {
LinkedList<int> infoList = new LinkedList<int>(info);
LinkedList<int> linkList = new LinkedList<int>(link);
Console.Write(string.Join(" ", Merge(infoList, linkList)));
}
如果您只想解决您的确切 LinkedList<int>
案例:
LinkedList<int> infoList = new LinkedList<int>(info);
LinkedList<int> linkList = new LinkedList<int>(link);
// Enumerate each collection
using (var enInfo = infoList.GetEnumerator()) {
using (var enLink = linkList.GetEnumerator()) {
bool proceed = true;
// until both exausted
while (proceed) {
proceed = false;
if (enInfo.MoveNext()) {
proceed = true;
Console.Write(enInfo.Current + " ");
}
if (enLink.MoveNext()) {
proceed = true;
Console.Write(enLink.Current + " ");
}
}
}
}
请帮助我,我尝试使用两个链接列表,因为我希望结果就像我的 2 数组元素一样。这是我的代码
class Program
{
int[] info = { 74, 90, 80, 63 };
int[] link = { 2, 6, 0, 3 };
static void Main(string[] args)
{
Program newProgram = new StrukturData.Program();
newProgram.Node();
Console.ReadLine();
}
public void Node()
{
LinkedList<int> infoList = new LinkedList<int>(info);
LinkedList<int> linkList = new LinkedList<int>(link);
foreach (var item in infoList)
{
Console.Write(item + " ");
foreach (var back in linkList)
{
Console.Write(back + " ");
}
}
}
}
输出
74 2 6 0 3 90 2 6 0 3 80 2 6 0 3 63 2 6 0 3
我的预期
74 2 90 6 80 0 63 3
我认为问题出在我的 foreach 语句中。对不起,我的英语不好,所以我不能说太多:(,但我希望你们能帮助我得到我期望的结果:)
你的循环应该是这样的
int[] info = { 74, 90, 80, 63 };
int[] link = { 2, 6, 0, 3 };
for(int i = 0; i < Math.Min(info.Length, link.Length); i++)
{
Console.Write(info[i] + " ");
Console.Write(link[i] + " ");
}
如果 2 个数组的大小相同,则之前的解决方案有效。
这是新循环:
int max = Math.Max(infoList.Count,linkList.Count);
for (int i = 0; i < max; i++)
{
if (i < infoList.Count)
Console.Write(infoList.ElementAt(i) + " ");
if (i < linkList.Count)
Console.Write(linkList.ElementAt(i) + " ");
}
如果您正在寻找通用解决方案(虽然可能很复杂),请查看
我的答案适用于 any IEnumerable<T>
(包括 LinkedList<int>
、int[]
)输入:
public void Node() {
Console.Write(string.Join(" ", Merge(info, link)));
}
或者如果你坚持LinkedList<T>
:
public void Node() {
LinkedList<int> infoList = new LinkedList<int>(info);
LinkedList<int> linkList = new LinkedList<int>(link);
Console.Write(string.Join(" ", Merge(infoList, linkList)));
}
如果您只想解决您的确切 LinkedList<int>
案例:
LinkedList<int> infoList = new LinkedList<int>(info);
LinkedList<int> linkList = new LinkedList<int>(link);
// Enumerate each collection
using (var enInfo = infoList.GetEnumerator()) {
using (var enLink = linkList.GetEnumerator()) {
bool proceed = true;
// until both exausted
while (proceed) {
proceed = false;
if (enInfo.MoveNext()) {
proceed = true;
Console.Write(enInfo.Current + " ");
}
if (enLink.MoveNext()) {
proceed = true;
Console.Write(enLink.Current + " ");
}
}
}
}