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

списки С\С++

Подскажите что необходимо добавить, чтобы удалялись группы повторяющихся чисел, а то остаются первые вхождения
Необходимо решить именно с использованием списков.
#include <fstream>
#include <iostream>
#include <locale.h>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>

using namespace std;

struct LIST {
int number;
LIST *next;
};

//Функция чтения данных и занесения их в создаваемый список:
LIST *read_list(LIST *lst) {
lst=0;
LIST *p=0;
int t;
ifstream f("1.txt");
// первый элемент
if (f>>t) {
lst=new LIST;
p=lst;
p->number=t;
}

// последующие элементы
while (f>>t) { //Пока не конец файла
p->next=new LIST;
p=p->next;
p->number=t;
}

// закончили создавать список
if (p) p->next=0;

return lst;
}

LIST *del_group_element(LIST *lst)
{
LIST *p=lst;

if (p==0) return lst;

do
{
int num=p->number;
LIST *prev=p;
LIST *pos=p->next;
int flag=0;
while (pos!=0)
{
if (pos->number==num)
{
LIST* tmp=pos;
pos=pos->next;
prev->next=pos;
delete tmp;
flag=1;
}
else
{
prev=pos;
pos=pos->next;
}
}

if (flag)
{
if (p==lst)
{
lst=pos;
pos=pos->next;
prev=pos;
LIST* tmp=p;
p=p->next;
delete tmp;
}
}
else
p=p->next;

} while (p!=0);
return lst;
}

int main()
{
LIST *lst=0, *p=lst;
int n;

setlocale(LC_CTYPE,"");
lst = read_list(lst);

cout << "элементы списка: \n";
p=lst;
while (p) {
//Выводим данные
cout<<' '<<p->number;
// Переходим на следующий элемент
p=p->next;
}
cout<<endl;>number;
// Переходим на следующий элемент
p=p->next;
}
cout<<endl;>
У меня все работает:

#include <iostream>
#include <fstream>

using namespace std;

struct LIST {
int number;
LIST *next;
};

LIST *read_list(istream &in) {
LIST *lst = 0;
LIST *p = 0;
int t;

if (in >> t) {
lst = new LIST;
p = lst;
p->number = t;
}

while (in >> t) {
p->next = new LIST;
p = p->next;
p->number = t;
}

if (p) p->next = 0;

return lst;
}

LIST *del_group_element(LIST *lst) {
LIST *p = lst;
bool flag = false;

if (!p) return p;

while (p) {
if ( p->next && (p->number == p->next->number) ) {
flag = true;
LIST *tmp = p;
p = p->next;
delete tmp;
} else {
if (flag) {
LIST *tmp = p;
p = p->next;
delete tmp;
flag = false;
} else {
break;
}
}
}

lst = p;

if (!lst) return lst;

while (p->next) {
LIST *next = p->next;
if ( next->next && (next->number == next->next->number) ) {
flag = true;
p->next = next->next;
delete next;
} else {
if (flag) {
p->next = next->next;
delete next;
flag = false;
} else {
p = p->next;
}
}
}

return lst;
}

int main() {
LIST *lst = 0, *p = lst;
int n;
ifstream in("1.txt");

lst = read_list(in);

cout << "элементы списка: \n";
p = lst;
while (p) {
cout << ' ' << p->number;
p = p->next;
}
cout << endl;

lst = del_group_element(lst);

cout << "\nрезультат: \n";
p = lst;
while (p) {
cout << ' ' << p->number;
p = p->next;
}
cout << endl;

return 0;
}

Александр Стецуренко
Александр Стецуренко
53 844
Лучший ответ