Как распечатать две программы Linked List

Пожалуйста, помогите мне, я пытаюсь использовать два связанных списка, потому что я хочу, чтобы результат был похож на мой элемент массива 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 + "  ");
            }
        }
    }
}

Ouput

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. Извините, мой английский плохой, поэтому я не могу много говорить:(, но я надеюсь, что вы, ребята, сможете помочь мне получить результат, который я ожидал:)

3 ответа

Решение

Если вы ищете универсальное решение (которое может быть сложным, хотя), пожалуйста, посмотрите на

Объединение нескольких списков с "выталкивающими" элементами переменной длины из каждого

где мой ответ подойдет для любого 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 + "  ");
       } 
     }  
   }
 }

Вот как должна выглядеть ваша петля

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] + " ");
}

Предыдущее решение работает, если размер двух массивов одинаков.

Вот новый цикл:

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) + "  ");
    }
Другие вопросы по тегам