0 / 0 / 0
Регистрация: 14.12.2019
Сообщений: 12
1

Удаление двух подряд идущих элементов односвязного списка

21.01.2020, 09:27. Показов 1250. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Нужно создать метод шаблонного класса List, который бы удалял 2 подряд идущих элемента.(именно как метод класса). Помогите пожалуйста.

Добавлено через 10 минут
И вместо двух этих элементов ставить их сумму
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.01.2020, 09:27
Ответы с готовыми решениями:

Удаление подряд идущих элементов
Дан список из n целых чисел a1, a2,...,an. Из группы подряд идущих элементов с одинаковыми...

Удаление подряд идущих элементов
Добрый день, помогите пожалуйста с задачей. Дан список из n целых чисел a1, a2,. . .,an. Из группы...

Удаление подряд идущих одинаковых элементов массива
В целочисленном массиве удалить все подряд идущие одинаковые элементы.

Удаление элементов из односвязного списка списка
Привет всем знатокам, суровым программистам и профессионалам своего дела. Засел за реализацией...

4
6577 / 4562 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
21.01.2020, 10:08 2
Цитата Сообщение от Denis98262526 Посмотреть сообщение
Всем привет! Нужно создать метод шаблонного класса List, который бы удалял 2 подряд идущих элемента.(именно как метод класса). Помогите пожалуйста.
Сам-то шаблонный класс где?
0
5884 / 3288 / 1351
Регистрация: 07.02.2019
Сообщений: 8,309
21.01.2020, 10:11 3
Denis98262526,
C++
1
2
3
4
5
6
7
8
9
node* list::del(node* el)
{   // псевдокод для односвязного списка
    if (!el || !el->next) return nullptr;
    node* to_del = el->next;
    el->next = to_del->next;
    el->data += to_del->data;
    delete to_del;
    return el;
}
0
0 / 0 / 0
Регистрация: 14.12.2019
Сообщений: 12
21.01.2020, 10:21  [ТС] 4
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#include<iostream> 
 
using namespace std; 
template<typename T> 
class List 
{ 
public: 
 
 List(); 
 ~List(); 
 
 void push_back(T data); 
 void push_front(T data); 
 int Get_Size() { return size; } 
 void pop_front(); 
 void pop_back(); 
 void clear(); 
 void insert(T data, int i); 
 void removeI(int i); 
 T& operator[](const int i); 
 void reduce(); 
 /*T& operator=(const List& list);*/ 
 
private: 
 template<typename T> 
 class Node 
 { 
 public: 
  Node* pNext; 
  T data; 
  Node(T data = T(), Node* pNext = nullptr) 
  { 
   this->data = data; 
   this->pNext = pNext; 
  } 
 }; 
 int size; 
 Node<T>* head; 
}; 
 
template<typename T> 
List<T>::List() 
{ 
 size = 0; 
 head = nullptr; 
} 
 
template<typename T> 
List<T>::~List() 
{ 
} 
 
template<typename T> 
void List<T>::push_back(T data) 
{ 
 if (head == nullptr) 
 { 
  head = new Node<T>(data); 
 } 
 else 
 { 
  Node<T>* cur = this->head; 
  while (cur->pNext!=nullptr) 
  { 
   cur = cur->pNext; 
  } 
  cur->pNext = new Node<T>(data); 
 } 
 size++; 
} 
 
template<typename T> 
void List<T>::push_front(T data) 
{ 
 head = new Node<T>(data,head); 
 size++; 
} 
 
template<typename T> 
void List<T>::pop_front() 
{ 
 Node<T>*temp = head; 
 head = head->pNext; 
 delete temp; 
 size--; 
} 
 
template<typename T> 
void List<T>::pop_back() 
{ 
 removeI(size - 1); 
} 
 
template<typename T> 
void List<T>::clear() 
{ 
 while (size) 
 { 
  pop_front(); 
 } 
} 
 
template<typename T> 
void List<T>::insert(T data, int i) 
{ 
 if (i == 0) 
 { 
  push_front(data); 
 } 
 else 
 { 
  Node<T>* previos = this->head; 
  for (int j = 0; j < i - 1; j++) 
  { 
   previos = previos->pNext; 
  } 
  Node<T>* newNode = new Node<T>(data, previos->pNext); 
  previos->pNext = newNode; 
  size++; 
 } 
} 
 
template<typename T> 
void List<T>::removeI(int i) 
{ 
 if (i == 0) 
 { 
  pop_front(); 
 } 
 else 
 { 
  Node<T>* previos = this->head; 
  for (int j = 0; j < i - 1; j++) 
  { 
   previos = previos->pNext; 
  } 
  Node<T>* Tdelet = previos->pNext; 
  previos->pNext = Tdelet->pNext; 
  delete Tdelet; 
  size--; 
 } 
} 
 
template<typename T> 
T& List<T>::operator[](const int i) 
{ 
 Node<T>*cur = this->head; 
 int count = 0; 
 while (cur!=nullptr) 
 { 
  if (count == i) 
  { 
   return cur->data; 
  } 
  cur = cur->pNext; 
  count++; 
 } 
} 
 
template<typename T> 
void List<T>::reduce() 
{ 
 for (int j = 0; j < size-2; j+2) 
 { 
 
 
 
 
 } 
} 
 
 
 
 
int main() 
{ 
 List<int> st; 
 List<int> st2; 
 st.push_back(5); 
 st.push_back(10); 
 st.push_back(22); 
 st.push_front(1001); 
 /*for (int i = 0; i < st.Get_Size(); i++) 
  cout « st[i] « "/"; 
 st.insert(999, 3); 
 cout « endl;*/ 
 /*st.pop_front(); 
 cout « st.Get_Size() « endl;; 
 cout « st[1]«endl;*/ 
 
 for (int i = 0; i < st.Get_Size(); i++) 
 { 
  cout « st[i] « "/"; 
 } 
 
 st.reduce(); 
 return 0; 
}
Добавлено через 31 секунду
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#include<iostream> 
 
using namespace std; 
template<typename T> 
class List 
{ 
public: 
 
 List(); 
 ~List(); 
 
 void push_back(T data); 
 void push_front(T data); 
 int Get_Size() { return size; } 
 void pop_front(); 
 void pop_back(); 
 void clear(); 
 void insert(T data, int i); 
 void removeI(int i); 
 T& operator[](const int i); 
 void reduce(); 
 /*T& operator=(const List& list);*/ 
 
private: 
 template<typename T> 
 class Node 
 { 
 public: 
  Node* pNext; 
  T data; 
  Node(T data = T(), Node* pNext = nullptr) 
  { 
   this->data = data; 
   this->pNext = pNext; 
  } 
 }; 
 int size; 
 Node<T>* head; 
}; 
 
template<typename T> 
List<T>::List() 
{ 
 size = 0; 
 head = nullptr; 
} 
 
template<typename T> 
List<T>::~List() 
{ 
} 
 
template<typename T> 
void List<T>::push_back(T data) 
{ 
 if (head == nullptr) 
 { 
  head = new Node<T>(data); 
 } 
 else 
 { 
  Node<T>* cur = this->head; 
  while (cur->pNext!=nullptr) 
  { 
   cur = cur->pNext; 
  } 
  cur->pNext = new Node<T>(data); 
 } 
 size++; 
} 
 
template<typename T> 
void List<T>::push_front(T data) 
{ 
 head = new Node<T>(data,head); 
 size++; 
} 
 
template<typename T> 
void List<T>::pop_front() 
{ 
 Node<T>*temp = head; 
 head = head->pNext; 
 delete temp; 
 size--; 
} 
 
template<typename T> 
void List<T>::pop_back() 
{ 
 removeI(size - 1); 
} 
 
template<typename T> 
void List<T>::clear() 
{ 
 while (size) 
 { 
  pop_front(); 
 } 
} 
 
template<typename T> 
void List<T>::insert(T data, int i) 
{ 
 if (i == 0) 
 { 
  push_front(data); 
 } 
 else 
 { 
  Node<T>* previos = this->head; 
  for (int j = 0; j < i - 1; j++) 
  { 
   previos = previos->pNext; 
  } 
  Node<T>* newNode = new Node<T>(data, previos->pNext); 
  previos->pNext = newNode; 
  size++; 
 } 
} 
 
template<typename T> 
void List<T>::removeI(int i) 
{ 
 if (i == 0) 
 { 
  pop_front(); 
 } 
 else 
 { 
  Node<T>* previos = this->head; 
  for (int j = 0; j < i - 1; j++) 
  { 
   previos = previos->pNext; 
  } 
  Node<T>* Tdelet = previos->pNext; 
  previos->pNext = Tdelet->pNext; 
  delete Tdelet; 
  size--; 
 } 
} 
 
template<typename T> 
T& List<T>::operator[](const int i) 
{ 
 Node<T>*cur = this->head; 
 int count = 0; 
 while (cur!=nullptr) 
 { 
  if (count == i) 
  { 
   return cur->data; 
  } 
  cur = cur->pNext; 
  count++; 
 } 
} 
 
template<typename T> 
void List<T>::reduce() 
{ 
 for (int j = 0; j < size-2; j+2) 
 { 
 
 
 
 
 } 
} 
 
 
 
 
int main() 
{ 
 List<int> st; 
 List<int> st2; 
 st.push_back(5); 
 st.push_back(10); 
 st.push_back(22); 
 st.push_front(1001); 
 /*for (int i = 0; i < st.Get_Size(); i++) 
  cout « st[i] « "/"; 
 st.insert(999, 3); 
 cout « endl;*/ 
 /*st.pop_front(); 
 cout « st.Get_Size() « endl;; 
 cout « st[1]«endl;*/ 
 
 for (int i = 0; i < st.Get_Size(); i++) 
 { 
  cout « st[i] « "/"; 
 } 
 
 st.reduce(); 
 return 0; 
}
0
6577 / 4562 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
21.01.2020, 10:38 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
void replace_duplicates_by_sum()
{
    for (auto *p = head; p && p->next; p = p->next)
    {
        auto *p2 = p->next;
        if (p->data == p2->data)
        {
            p->data += p2->data;
            p->next = p2->next;
            delete p2;
        }
    }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.01.2020, 10:38
Помогаю со студенческими работами здесь

Удаление элементов из односвязного списка (STL)
Здравствуйте, уважаемые форумчане! Помогите, пожалуйста, с контейнером forward_list&lt;int&gt; (именно с...

Удаление нескольких элементов из односвязного списка
Всем привет! Собственно, сабж: есть односвязный список с повторяющимися элементами. Мне надо...

Процесс сортировки, удаление идущих подряд повторяющихся элементов массива
Требуется заполнить массив целыми числами, а затем найти повторяющиеся соседние и оставить только...

Удаление повторяющихся элементов из односвязного списка forward_list
Есть односвязный список из 6 элементов, некоторые из которых повторяются. Удалить первый...

Список: Удаление всех подряд идущих одинаковых элементов из списка
Помогите пожалуйста реализовать процедуру удаления всех подряд идущих одинаковых элементов из...

Удаление всех элементов односвязного списка
есть односвязный список из struct el{ int val; struct el* next; }; причем у...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru