Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
3 / 3 / 8
Регистрация: 25.11.2015
Сообщений: 127

Хочу написать функцию для удаления всех node у которых одинаковые значения

25.11.2015, 18:55. Показов 650. Ответов 2
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
писал вот так, но почему то не работает, то есть для начала хочу просто отображать индексы таких node, а потом подумаю на удаление.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void List::ClearEven() {
    Node* current=m_first;
    Node* next=current;
    const int N =GetLength()-1;
    const int M=GetLength()-2;
    
        for(int i=0; i<N; i++) {
            for(int j=i+1; j<GetLength()-4;j++) {
                next=next->link;
            if(current->info==next->info)
            { cout<<"["<<j<<"]";
            
            }
            else
                continue;
            }
            current=current->link;
        }
        
}
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
#include <iostream>
struct Node {
    int info;
    Node* link;
};
class List {
private:
    Node* m_first;
    int m_size;
public:
    List();
    List(const List&);
    bool IsEmpty() const {return m_size==0;}
    int GetLength() const {return m_size;}
    Node* GetFirst() const {return m_first; }
    void InsertAfter(Node*, int info);
    void InsertAt(int index, int info);
    void DeleteAfter(Node*);
    void DeleteAt(int);
    int &GetData(Node* T){return T->info;}
    void PrintList();
    void Reverse();
    void Clear();
    void ClearDv();
    void ClearEven();
};
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#include <iostream>
#include "LinkedList.h"
using namespace std;
List::List() {
    m_size=0;
    m_first=NULL;
}
List::List(const List& copyList) {
    m_first=NULL;
    m_size=0;
    Node* T= copyList.m_first;
    for (int i=0; i<copyList.GetLength(); i++)
    {
        InsertAt(i,T->info);
        T=T->link;
    }
    m_size=copyList.m_size;
}
void List::PrintList() {
    if(IsEmpty())
        cout<<"Empty"<<endl;
    Node* T=m_first;
    for (int i=0; i<GetLength();i++)
    {
        cout<<" "<<T->info;
        T=T->link;
    }
}
 
void List::InsertAfter(Node* AfterThis, int newInfo) {
    Node* T = new Node;
    T->info=newInfo;
    T->link=AfterThis->link;
    AfterThis->link=T;
    m_size++; }
void List::InsertAt(int index, int newInfo) {
    if(index==0)
    {
        Node* T= new Node;
        T->info=newInfo;
        T->link=m_first;
        m_first=T;
        m_size++;
        return;
    }
    Node* T=m_first;
    for(int i=0; i<index-1; i++)
        T=T->link;
    InsertAfter(T,newInfo);
}
void List::DeleteAfter(Node* AfterThis) {
    if (IsEmpty())  {throw "List is Empty"; }
    if (AfterThis->link=NULL) { throw "There isn't anything to delete" ;}
 
    Node* T= new Node;
    T=AfterThis->link;
    AfterThis->link=T->link;
    delete T;
    m_size--;
    return;
}
void List::DeleteAt(int index) {
    if (index <0  || index>GetLength()) {
        throw "Error"; }
    if  (index==0 && GetLength()!=0)
    {
        Node* T=m_first;
        m_first=m_first->link;
        delete T;
        m_size --;
        return;
    }
    Node* T=m_first;
    for(int i=0; i<index-1; i++)
        T=T->link;
    Node* P=T->link;
    T->link=P->link;
    delete P;
    m_size --;
 
}
void List::Clear()
{ 
 
    while(m_first!=NULL) {
        DeleteAt(0);
     
    }
 
}
void List::Reverse() {
    Node* current, *prev, *next;
    current=m_first;
    prev=NULL;
    while(current!=NULL)
    {
        next=current->link;
        current->link=prev;
        prev=current;
        current=next;
    }
    m_first=prev;
}
void List::ClearDv() {
        Node*current=m_first;
        Node* prev=NULL;
        while(current) {
        
            if(current->info%2==0)
            { 
                if(m_first->info%2==0)
                {
                    Node*P=m_first;
                    current=m_first->link;
                    m_first=m_first->link;
                    delete P;
                    m_size--;
                    continue;
                }
                else {
                Node *P=current;
                current=current->link;
                prev->link=current;
                delete P;
                m_size--;
                continue;
                }
            }
            
            else 
                prev=current;
                current=current->link;
                
            
        }
}
void List::ClearEven() {
    Node* current=m_first;
    Node* next=current;
    const int N =GetLength()-1;
    const int M=GetLength()-2;
    
        for(int i=0; i<N; i++) {
            for(int j=i+1; j<GetLength()-4;j++) {
                next=next->link;
            if(current->info==next->info)
            { cout<<"["<<j<<"]";
            
            }
            else
                continue;
            }
            current=current->link;
        }
        
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.11.2015, 18:55
Ответы с готовыми решениями:

Написать функцию для удаления всех подстрок для заданной строки
всем привет, я новичок в плюсах, поясните пожалуйста, хотел отдебажить функцию, но она даже не запускается #include &quot;stdafx.h&quot; ...

Дан односвязный список. Написать функцию удаления из него всех элементов с минимальным значением
Дан односвязный список. Написать функцию удаления из него всех элементов с минимальным значением. #include &lt;iostream&gt; #include...

Разработайте функцию для удаления из Си-программы всех комментариев
Помогите, пожалуйста, нужно разработать: функцию для удаления из Си-программы всех комментариев. Аккуратно обращаться с «закавыченными»...

2
 Аватар для aiwprton805
78 / 77 / 51
Регистрация: 30.03.2013
Сообщений: 194
25.11.2015, 19:39
Как-то так. Не тестировалось.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void List::ClearEven(int index=0) {
    if(index < 0 || index >= m_size){
        return;}
    Node* current = m_first;
    for(int i=0; i<index; ++i){
        current = current->link;}
    int info = current->info;
    while(current->link){
        if(info == current->link->info){
            //////////////////удаление
            Node* T = current;////////
            current = current->link;//
            Node* prev = m_first;/////
            while(prev->link != T){///
                prev = prev->link;}///
            prev->link = current;/////
            delete T;/////////////////
            --m_size;}////////////////
        else{
            current = current->link;}
    }
    ClearEven(index+1);
}
0
3 / 3 / 8
Регистрация: 25.11.2015
Сообщений: 127
25.11.2015, 19:45  [ТС]
а если не рекурсивно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.11.2015, 19:45
Помогаю со студенческими работами здесь

Написать функцию для удаления строки из двумерного массива
. Написать функцию для удаления строки из двумерного массива. Оставшиеся строки должны быть расположены плотно, недостающие элементы...

Написать функцию для непосредтственно удаления слов и подставления числа
Дан текстовый файл. Группы символов, разделенные пробелами, будем называть словами. В файле оставить только по одному экземпляру каждого...

Нужно написать функцию compress для удаления повторяющихся букв в слове
Function - Compress(s,t). Purpose - замена в строке s множественных вхождений символа t на одно. Например слово:...

Строка: Написать функцию для определения слов, которые начинаются и заканчиваются на одинаковые буквы.
Дана строка символов. Написать функцию для определения слов, которые начинаются и заканчиваются на одинаковые буквы. При написании...

Ограничить значения всех элементов, абсолютные значения которых, превышают среднее для положительных и отрицательных элементов
Нуждаюсь в помощи!Нужно составить программу! Ограничить значения всех элементов, абсолютные значения которых, превышают среднее для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru