请教两个链表中的元素怎么比较,找出两个链表中不同字符串

请问两个链表中的元素如何比较,找出两个链表中不同字符串
我创建了两个链表 
CList<CString,CString> List;
CList<CString,CString> List1;
两个链表均存储我遍历指定文件夹后得到的文件,List存储第一次遍历得到的文件,此时我在指定文件夹下增加或删除文件时,就在执行一次遍历指定目录得到的新数据存到List1中,请问我如何将这两个链表进行对比找出其中不同的部分(就是新加入或删除的文件)。
我写了如下的方法: 其中的num与num1是这两个链表的结点个数
POSITION pos  = List.GetHeadPosition();
POSITION pos1 = List1.GetHeadPosition();
if(num > num1)                                    
{
   CString str;
   str = "有文件被删除,删除的文件为:";
   SetDlgItemText(IDC_EDIT3,str);
CString str2="";
CString str3="";
for(int i=0;i<num1;i++)
{
          str2 = List1.GetNext(pos1);
for(int j=0;j<num;j++)
{
         str3 = List.GetNext(pos);
// SetDlgItemText(IDC_EDIT10,str3);
if(strcmp(str2,str3) != 0)
{
    SetDlgItemText(IDC_EDIT10,str3);
}
}

}
这样做没有得到我想要的数据,而且执行按钮功能的时候程序还会崩溃,求大神指教,该如何修改
------最佳解决方案--------------------
CString str1,str2;
POSITION pi=list.GetHeadPosition();
POSITION pi2=list1.GetHeadPosition();
bool bFind = false;
CString str;

while(pi!=NULL)
 {
  bFind = false;
  str1=list.GetAt(pi);
  while (pi2!=NULL)
  {
      str2 = list1.GetAt(pi2);
      if (str1 == str2)
      {
          bFind=true;
          str=str1;
          break;
      }
      list1.GetNext(pi2);
  }
  if(bFind)
  {
     //str为删除文件,该干嘛干嘛
  }
  list.GetNext(pi);
 }



pi=list.GetHeadPosition();
pi2=list1.GetHeadPosition();

while(pi2!=NULL)
 {
  bFind=false;
  str2=list1.GetAt(pi2);
  while (pi!=NULL)
  {
      str1 = list.GetAt(pi);
      if (str1 == str2)
      {
          str = str1;
          bFind = true;
          break;
      }
      list.GetNext(pi);
  }
  if(bFind)
  {
     //str为新增文件,该干嘛干嘛
  }
  list1.GetNext(pi2);
 }


------其他解决方案--------------------
需要遍历2次  第一次 先遍历list 里面去和list1比较 这样可以得到删除的文件(在list不在list1)

然后先遍历list1 里面去和list比较  这样可以得到新增的文件(在list1不在list)
------其他解决方案--------------------
if(num > num1)   不能用个数来做条件   如果我删一个加一个  你这个逻辑不是认为没改变了?