Witam
Mam nadzieje że da się zrozumieć temat?
Mam taki problem, chcę przekazać w argumentach funkcji wskaźnik do struktury (na razie pusty = NULL) i wewnątrz funkcji go zmienić tak żeby zmiany 'wyszły' poza funkcje. Wiem że na pewno można to zrobić inaczej ale chciał bym zostać przy takim sposobie.
Zadanie polega na tym żeby połączyć dwie listy w jedną w taki sposób żeby elementy się nie powtarzały.
Oto kod. Na razie działa tworzenie dwóch list i ich losowe wypełnienie, chcę listę h1 wprowadzić do listy h a przy wprowadzaniu h2 sprawdzać czy elementy się nie powtarzają i dopiero wtedy dodawać.
Nie proszę o jakieś duże zmiany kodu tylko o informację jak poradzić sobie z tymi wskaźnikami?
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <ctime>
using namespace std;
struct element
{
int w;
element *next;
};
element* DodanieNaKoniec(element *end, int dodaje)
{
element *tmp;
tmp=new element;
tmp->next=NULL;
tmp->w=dodaje;
if(end!=NULL)end->next=tmp;//w przypadku pierwszego elementu end=NULL wiec musi byc ten if
return tmp;
}
void SumaZbiorow(element *h1, element *h2, element *h, element *end)
{
//najpierw przepisuje h1 do nowej listy
element *tmp=h1;//tmp do przegladania h1
element *tmp2;//tmp2 wskazuje na poprzedni element;
while(tmp!=NULL)
{
element *nowa=new element;
nowa->w=tmp->w;//przepisanie wartosci
if(h==NULL)
{
nowa->next=NULL;
h=nowa;
end=nowa;
tmp2=nowa;
}
else
{
nowa->next=NULL;
tmp2->next=nowa;
end=nowa;
tmp2=nowa;
}
tmp=tmp->next;
}
//pozniej bede chcial sprawdzac czy elementy z h2 sie nie powtarzaja i jezeli nie to wprowadzac je dalej
}
void WyswietlanieListy(element *h)
{
element *tmp=h;
int licznik=1;
while(tmp!=NULL)
{
cout<<licznik<<":\t"<<tmp->w<<endl;
tmp=tmp->next;
licznik++;
}
}
int main()
{
element *h1=NULL, *end1=NULL;
element *h2=NULL, *end2=NULL;
element *h=NULL, *end=NULL;
//tworzenie dwóch list po 10 elementów
for(int i=0;i<10;i++)
{
if(h1==NULL && h2==NULL)
{
int dodaj1=rand()%10;
int dodaj2=rand()%10;
h1=end1=DodanieNaKoniec(end1,dodaj1);
h2=end2=DodanieNaKoniec(end2,dodaj2);
}
else
{
int dodaj1=rand()%10;
int dodaj2=rand()%10;
end1=DodanieNaKoniec(end1,dodaj1);
end2=DodanieNaKoniec(end2,dodaj2);
}
}
cout<<endl<<"Oto pierwsza lista: "<<endl;
WyswietlanieListy(h1);
cout<<endl;
cout<<endl<<"Oto druga lista: "<<endl;
WyswietlanieListy(h2);
cout<<endl<<endl;
SumaZbiorow(h1,h2,h,end);
cout<<"Oto 3 lista: "<<endl;//I po tym fragmecie pogram nic dalej nie wyswietla
WyswietlanieListy(h);
cout<<endl;
system("pause");
return 0;
}