Другие языки программирования и технологии

С++ функция удаления группы одинаковых чисел из списка

с использованием односвязных линейных списков
LIST *del_group_element(LIST *lst)
{
LIST *p1=lst,*p2=p1->next, *p3=p2->next, *prev=lst;
int l=0;
while (p1)
{

if((p1->number)==(p2->number))
{
delete p2;
delete p1;
if(p1==lst)
{

lst=p2->next;
prev=lst;
p1=lst;
}
else
{

prev->next=p2->next;
p1=prev;
}
}
else prev=p1;
if (p1!=p2->next) p1=p1->next;

if (p2->next) p2=p2->next;
}
return lst;
}
San4Es ________
San4Es ________
366
УЖАС. С удаленными элементами нельзя работать - никто не гарантирует, что они еще там есть. Кроме того, удалить, просят группу, а не пару. И вообще топорно. И непонятно, как обозначается конец списка.. .
Добавь функцию "культурного" удаления элемента списка (т. е. сначала меняем указатель предыдущего, а потом удаляем) , и удаляй только через нее.
Ну и ищи сначала группу, а потом ее всю удаляй, а не парами.
Махач Мирзоев
Махач Мирзоев
74 961
Лучший ответ
так есть стандартная функция исппользуйте ее
list::unique
примерчик
// list::unique
#include <iostream>
#include <cmath>
#include <list>
using namespace std;

// a binary predicate implemented as a function:
bool same_integral_part (double first, double second)
{ return ( int(first)==int(second) ); }

// a binary predicate implemented as a class:
class is_near
{
public:
bool operator() (double first, double second)
{ return (fabs(first-second)< 5.0); }
};

int main ()
{
double mydoubles[]={ 12.15, 2.72, 73.0, 12.77, 3.14,
12.77, 73.35, 72.25, 15.3, 72.25 };
list< double > mylist (mydoubles,mydoubles+10);

mylist.sort(); // 2.72, 3.14, 12.15, 12.77, 12.77,
// 15.3, 72.25, 72.25, 73.0, 73.35

mylist.unique(); // 2.72, 3.14, 12.15, 12.77
// 15.3, 72.25, 73.0, 73.35

mylist.unique (same_integral_part); // 2.72, 3.14, 12.15
// 15.3, 72.25, 73.0

mylist.unique (is_near()); // 2.72, 12.15, 72.25

cout << "mylist contains:";
for (list<double>::iterator it=mylist.begin(); it!=mylist.end(); ++it)
cout << " " << *it;
cout << endl;

return 0;
}
| Франция |
| Франция |
35 594
как-то так : http://pastebin.com/gcQHeeys

@Николай, ну это же С обучающий курс структурам данных - это раз, надо удалить всю группу, а не оставить уникальные - это два, ну и три - на STL это делается одной строкой через remove_if предикат.

Похожие вопросы