两个链表的联合 - C ++

时间:2011-05-23 23:28:55

标签: c++ linked-list

任何帮助都会有所帮助。我编写了一个代码来查找两个链表的并集。但是,我在一个部分得到一个无限循环。我在代码中指出它。请帮我识别错误。感谢。

//Finds the union of two linked lists. 
nodeType* unionLL(nodeType *&headA, nodeType *&headB)
{
      nodeType *tempA, *tempB, *newNode;         
      tempA = headA;
      tempB = headB;
      bool match = false;

      while (tempB -> link != NULL)
      {
            while (tempA -> link != NULL)                
            {
                  outfile <<"The infinite loop occurs here " << endl;
                  if (tempB -> intVal == tempA -> intVal)
                  {   
                      match = true;
                  }  
                  tempA = tempA -> link;
            }

            if (!match)
            {
               newNode = new nodeType;
               newNode -> intVal = tempB -> intVal;
               newNode -> link = NULL;
               tempA -> link = newNode;
            }
            tempA = headB;
            tempB = tempB -> link;
      }

      return headB;
 }

2 个答案:

答案 0 :(得分:4)

您尚未确定链接列表是否已排序 - 因此我们不应该假设。您尚未确定哪个列表可以修改;从表面上看,这两个列表都可以通过该功能进行修改。您返回headB,表明结果应该是headB中可访问的结果集应包含该列表中的每个元素,以及可从headA访问的每个元素的新元素已经通过headB找到了。

表面上看,你的伪代码应该是:

foreach element in listA
    if (element not found in listB)
        add copy of element to listB

离开listA未触及。您的代码未实现此逻辑。

答案 1 :(得分:0)

我认为你没有检查它是否在tampA循环中匹配(在Bsp>中都没有