Форум программистов, компьютерный форум CyberForum.ru

Удалить повторяющиеся элементы списка - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
romka_f
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 15
14.04.2013, 22:11     Удалить повторяющиеся элементы списка #1
Есть список в виде класса.
Нужно удалить повторяющиеся элементы, вернее, чтобы каждого было по одному. (например, вводится 1 2 3 3 4 4, а на выходе должно быть 1 2 3 4)
Пытался накидать функцию, но совсем запутался в указателях, ведь надо сравнить каждый с каждым. Спасайте, пожалуйста.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Elem* List::check_duplicates()
{
    Elem *prev;
    Elem *tmp;
 
    current=first;
    prev=current;
    for(start(); !end(); next())
    {
        tmp=prev;
        prev=current;
        for(current=current->next; !end(); next())
        {
            if(prev->num==current->num)
            {
                tmp->next=prev->next;
                prev->next=NULL;
            }
 
        }
    }
}
Добавлено через 38 минут
Ребята, помогите, пожалуйтса
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2013, 22:11     Удалить повторяющиеся элементы списка
Посмотрите здесь:

C++ Удалить из массива повторяющиеся элементы
C++ Как удалить из исходного массива не повторяющиеся элементы?
C++ Удалить из списка все элементы с нечётными значениями и вывести указатель p2 на начало преобразованного списка.
C++ Исключить повторяющиеся элементы из списка
Удалить повторяющиеся элементы в отсортированнном массиве C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
incrome
9 / 9 / 0
Регистрация: 03.07.2012
Сообщений: 60
14.04.2013, 22:18     Удалить повторяющиеся элементы списка #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void del () 
 {
    int mass[10] = {1,1,2,2,3,3,4,4,5,5};
    int cf = 0,cs = 0; //Переменные для сверки массива
 
    for (int i = 0; i < 10; i++) { //перебор массива
    cf = mass[i];     //первый
    cs = mass[i+1]; //след элемент
    if (cf == cs){ //если одинаковые
     for (int j = i; j < 10; j++){ //замещаем его на след и сдвигаем массив.
     mass[j] = mass[j+1];
     }
 
 
    }
 
 
 
}
В билдере не проверял, но в теории так должно работать)
romka_f
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 15
14.04.2013, 23:15  [ТС]     Удалить повторяющиеся элементы списка #3
переписал Ваш метод для списков, не работает чего-то...да и в теории, если подумать, то он сравнивает только два рядомстоящих элемента
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Elem* List::check_duplicates()
{
    Elem *tmp;
 
    current=first;
    tmp=first;
    for(start(); !end(); next())
    {
        if(current->num==current->next->num)
        {
             for(tmp=current; !end(); next())
             {
                 tmp->num=tmp->next->num;
             }
        }
    }
}
может у кого-то ещё есть варианты?

Добавлено через 42 минуты
вот конечный вариант, но всё равно иногда криво работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Elem* List::check_duplicates()
{
    Elem *tmp;
 
    current=first;
    tmp=first;
    for(tmp=first; tmp!=NULL; tmp=tmp->next)
    {
        for(current=current->next; !end(); next())
        {
            if(tmp->num==current->num)
            {
                tmp->next=current->next;
                current=NULL;
            }
        }
        current=tmp->next;
    }
}
Добавлено через 19 секунд
вот конечный вариант, но всё равно иногда криво работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Elem* List::check_duplicates()
{
    Elem *tmp;
 
    current=first;
    tmp=first;
    for(tmp=first; tmp!=NULL; tmp=tmp->next)
    {
        for(current=current->next; !end(); next())
        {
            if(tmp->num==current->num)
            {
                tmp->next=current->next;
                current=NULL;
            }
        }
        current=tmp->next;
    }
}
incrome
9 / 9 / 0
Регистрация: 03.07.2012
Сообщений: 60
15.04.2013, 00:17     Удалить повторяющиеся элементы списка #4
ах ну да! Там еще нужен был for для сдвига 2 элемента!!! Проглядел!!
Ну в целом мысль верная!)
Yandex
Объявления
15.04.2013, 00:17     Удалить повторяющиеся элементы списка
Ответ Создать тему
Опции темы

Текущее время: 04:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru