【问题标题】:How to print two Linked List program如何打印两个链表程序
【发布时间】:2016-11-24 13:30:11
【问题描述】:

请帮助我,我尝试使用两个链接列表,因为我希望结果就像我的 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 语句中。对不起,我的英语不好,所以我不能说太多:(,但我希望你们能帮助我得到我所期望的结果:)

【问题讨论】:

  • stackoverflow.com/questions/40768322/… 我的答案适用于任何IEnumerable&lt;T&gt;: foreach (var item in Merge(infoList, linkList)) {...}
  • 想想你在做什么,对于infoList 中的每个项目,你打印该项目,然后是所有linkList
  • 如果infoListlinkList 具有相同 项您可以使用Zip 的数量:infoList.Zip(linkList, (a, b) =&gt; new int[] {a, b}).SelectMany(x =&gt; x);
  • @DmitryBychenko 我尝试使用 IEnumerable: foreach (var item in Merge(infoList, linkList)) {...} 并且它的工作。谢谢;D
  • @BagusArya 您可以通过单击旁边的复选标记来接受答案stackoverflow.com/help/accepted-answer

标签: c# linked-list singly-linked-list


【解决方案1】:

你的循环应该是这样的

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】:

    如果您正在寻找通用解决方案(虽然可能很复杂),请查看

    Merge multiple lists with variable length "popping" elements from each

    我的回答将适用于任何IEnumerable&lt;T&gt;(包括LinkedList&lt;int&gt;int[])输入:

     public void Node() {
       Console.Write(string.Join(" ", Merge(info, link)));
     }
    

    或者如果你坚持LinkedList&lt;T&gt;:

     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&lt;int&gt; 案例:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-25
        • 1970-01-01
        • 2017-04-11
        • 2015-01-18
        • 2022-01-15
        相关资源
        最近更新 更多