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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Visual C++ 2012. Консоль. scanf(). Обработка ошибок ввода http://www.cyberforum.ru/cpp-beginners/thread914283.html
Я использую процедуру scanf() для ввода даты через точку (типа 01.01.2000). Мне надо сделать так, чтобы обрабатывались ошибки при вводе (типа 01а2.01.2000), чтобы тогда прога просила ввести дату...
C++ Дана вещественная квадратная матрица Дана вещественная квадратная матрица. Определить: 1. произведение элементов в тех строках, которые не содержат отрицательных элементов 3. максимум среди элементов диагонали 3. разделить все... http://www.cyberforum.ru/cpp-beginners/thread914280.html
Символьные строки (замена строчных на прописные и на оборот) C++
Как решить задачу. Например в водим cYbErFoRuM,а выведит CyBeRfOrUm то есть меняет строчные на прописные и на оборот.... подскажите как это сделать.
C++ Привести матрицу к треугольному виду
Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых преобразований привести систему к треугольному виду. Найти кол-во строк, среднее арифметическое...
C++ Замена printf на cout http://www.cyberforum.ru/cpp-beginners/thread914242.html
Ув. коллеги, Можно ли заменить printf на cout в последнем выражении тернарного оператора (строка 13) без создания новой функции? #include <iostream> using namespace std; int f1(int n);...
C++ Сумма книг Предположим, что вы продаете книгу по программированию на языке C++ для начинающих. Напишите программу, которая позволит ввести ежемесячные объемы продаж в течение года (в количестве книг, а не в... подробнее

Показать сообщение отдельно
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
29.06.2013, 00:38
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
pList* deleteDublicate(pList *&first)
    {
        pList *bufI = 0;
        bool firstWasChanged = false;
        for (pList *i = first; i; i = i->next)
        {
            if (firstWasChanged)
            {
                i = first;
                firstWasChanged = false;
            }
            bool isDublicate = false;
            pList *bufJ = first;
            for (pList *j = first; j; j = j->next)
            {
                if (i->data == j->data && i != j)
                {
                    bufJ->next = j->next;
                    delete j;
                    j = bufJ;
                    isDublicate = true;
                }
                bufJ = j;
            }
            if (isDublicate)
            {
                if (i == first)
                {
                    bufI = i->next;
                    delete i;
                    i = bufI;
                    first = i;
                    if (!i) return 0; 
                    firstWasChanged = true;
                }
                else
                {
                    bufI->next = i->next;
                    delete i;
                    i = bufI;
                }
            }
            bufI = i;
        }
        return first;
    }
Вот пример, на котором тестил:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <iostream>
 
struct pList
{
    char data;
    pList *next;
};
 
class List
{
    pList *first;
public:
    List(): first() {}
    void add(char x)
    {
        if(!first)
        {
            first = new pList;
            first->data = x;
            first->next = 0;
        }
        else
        {
            pList *curr = new pList;
            curr->data = x;
            curr->next = first;
            first = curr;
        }
    }
    void show()
    {
        pList *curr = first;
        while (curr)
        {
            std::cout << curr->data << ' ';
            curr = curr->next;
        }
        std::cout << '\n';
    }
    void deleteDublicate()
    {
        pList *bufI = 0;
        bool firstWasChanged = false;
        for (pList *i = first; i; i = i->next)
        {
            if (firstWasChanged)
            {
                i = first;
                firstWasChanged = false;
            }
            bool isDublicate = false;
            pList *bufJ = first;
            for (pList *j = first; j; j = j->next)
            {
                if (i->data == j->data && i != j)
                {
                    bufJ->next = j->next;
                    delete j;
                    j = bufJ;
                    isDublicate = true;
                }
                bufJ = j;
            }
            if (isDublicate)
            {
                if (i == first)
                {
                    bufI = i->next;
                    delete i;
                    i = bufI;
                    first = i;
                    if (!i) return; 
                    firstWasChanged = true;
                }
                else
                {
                    bufI->next = i->next;
                    delete i;
                    i = bufI;
                }
            }
            bufI = i;
        }
    }
    ~List()
    {
        pList *curr = first;
        while (first)
        {
            curr = first->next;
            delete first;
            first = curr;
        }
        first = 0;
    }
};
 
int main()
 
{
    List list;
    list.add('c');
    list.add('B');
    list.add('A');
    list.add('a');
    list.add('a');
    list.add('c');
    list.deleteDublicate();
    list.show();
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru