Проверка на наличие одинаковых элементов в списке

Описать процедуру, которая проверяет, есть ли в списке L хотя бы 2 одинаковых элемента. задание №17. Двунаправденные списки. (см. "Сборник задач для начинающего программиста")

Алгоритм:
1.Создаем структуру
2.Формируем список
3.Ищем в цикле одинаковые элементы
4.Выводим сообщение есть или нет одинаковых элементов

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
 typedef struct list_elem {	// структура - элемент списка
 
      int index;			// поле данных
 
      struct list_elem *next;
 
  } LEL;			// пользовательский тип структурной переменной
 
  LEL* AddElem (LEL *last);	// функция присоединения нового элемента списка	
 
  void Del_El(void);		// функция проверки четности чисел и удаления элемента списка
 
  void PrintList(void);		//функция вывода на печать данных списка
 
  void  PoiskEl(void);		//функция поиска одинаковых элементов
 
  LEL  *list;			// адрес начала списка
 
 
 int main()
 
{
  clrscr();
 
  int N;
 
  printf("\nINPUT SIZE OF THE SPISOK: ");
 
  scanf("%d",&N);		// ввод размера списка
 
  LEL *end=NULL;		// указатель на последний элемент
 
  printf("\nINPUT DATE:");
 
  do{			// цикл формирования списка
     end=AddElem(end);
 
     if(end==NULL)		//  выход из цикла
 
       break;
 
    N--;			// счетчик введенных элементов
 
   } while(N > 0); 		// пока необходимо вводить элементы                      
 
   printf("\n\n\nOur SPISOK:");
 
   PrintList();			// вывод на печать сформированного списка
 
   PoiskEl();
 
   printf("\n\n\nNO! There are no equal elements in the spisok");
 
   getch();
 
 return 0;
 
}
 
   LEL* AddElem (LEL *last)
 
   {
    LEL *pel;				// указатель на новый элемент		
 
    static int num=1;			// номер вводимого элемента
 
    pel=(LEL*)malloc(sizeof(LEL));		// выделение памяти для элемента
 
    printf("\n\t%d element: ",num);
 
    scanf("%d",&pel->index);		// ввод данных
 
    fflush(stdin);			// очищение буфера ввода
 
    pel->next=NULL;			// элемент становится последним в списке
 
    if(list==NULL)			// если список пуст, то введенный элемент становится первым  
 
       list=pel;
 
    else				// иначе присоединяется к последнему в списке
 
       last->next=pel;
 
    num++;				// счетчик элементов
 
    return pel;
 }
 
   void PrintList(void)
 
   {
    LEL *pel=list;		      //  printf("\n\nlist po adresy %p = %d\n\n",list,list);
 
    while(pel!=NULL)			// пока не найден последний элемент
 
	{
	 printf("%5d",pel->index);	// выводим содержимое поля index
 
	 pel=pel->next;
 
	}
    }
 
 
 void PoiskEl(void)
 
   {
    LEL *pel=list;
 
     while(pel->next!=NULL)		//цикл сравнения элементов
 
   {
     while(pel->next!=NULL)
 
      {
	 pel=pel->next;		
 
	 if(list->index==pel->index)		//если есть одинаковые элементы - выходим из цикла 
 
	 {
	   printf("\n\nYES! There are equal elements in the spisok\n\n");
 
	   exit(0);
	 }
 
	}
 
        pel=list->next;
 
       list=list->next;
    }
  }

Ключевые слова: 
список, структура, цикл сравнения элементов