[C++]Dodawanie elementow do listy


(Dawcza57) #1

Witam

Uczę się do egzaminu i mam drobny problem muszę stworzyc funkcję która doda do juz istniejącej listy elementy. elementy maja być wstawione miedzy juz istniejace elementy. czyli miedzy pierwszym a drugim powinien byc nowy element, miedzy drugim a trzecim nastepny itd. W moim programie za to odpowiada funkcja wynikowa. ale niestety nic sie nie dzieje.

Oto cały kod jaki ja napisałem.

#include 

#include 

#include 

using namespace std;



struct node

{

        int val;

        node *next;

};

void dodajelement(node *&lista , int x) //

{

        node *pom;

        node *pom2 ;

        if (lista==NULL)

        {

        pom=new node;

        pom -> val = x;

        pom -> next = NULL;                                           

        lista=pom;

        cout<val<<" ";

        pom=NULL;


        }

        else

        {

                pom=lista;


                while (pom->next!=NULL)

                {

                        pom=pom->next;

                }


                        pom2 = new node;

                        pom2->val =x;

                        pom2->next =NULL;

                        pom ->next=pom2;

                        cout<val<<" ";



                }

}


node tworzliste(node *&lista)

{

        srand( time( NULL ) );

        for (int i=0;i<20;i++)

        {

                int z;

                z = 1+rand() % 15;

                dodajelement(lista , z);

        }

}


void wynikowa(node *&lista)

 {

 	node *pom=lista;

 	while(pom->next!=NULL)

 	{


 		node *pom2=new node;

 		pom2->val=00000000;

 		pom2->next=pom->next;

 		pom=pom->next->next;

 	}

 }


int main(int argc, char** argv)

{

        node *lista=NULL;

        tworzliste(lista);

        wynikowa(lista);

        system("pause");

        return 0;

    }

(etam) #2

Masz daną listę:

A -> B -> C -> D

twój kod zaczyna od elementu A, tworzy nowy element A1 i przypisuje A1->next = A->next

A1

      v

 A -> B -> C -> D

Dalej powtarza to samo dla każdego następnego elementu.

A1 B1 C1

      v v v

 A -> B -> C -> D

(Dawcza57) #3

no tak racja zapomnialem o tej linijce. Dodalem jeszcze linijke z cout aby wyswietlalo dany element. teraz funkcja wynikowa wyglada tak.

void wynikowa(node *&lista)

 {

    node *pom=lista;

    while(pom->next!=NULL)

    {


       node *pom2=new node;

       pom2->val=00000000;

       pom2->next=pom->next;

       cout<
       pom->next=pom2;

       pom=pom->next->next;

    }

 }

Ale problem Ciagle jest. Program sie uruchamia ale ciagle zle czyta ta funkcję źle bo pojawiaja sie tylko 3 nowe elementy, ktore sa umieszczone na samym koncu a nie pomiedzy elementami z listy stworzonej przez funkcje tworzliste.

//edit. moja pomylka jesli zmienilem pom2->val na pom2-val=21 wyswietlilo prawidlowa liste elementow ale ciagle sa one porozstawiane na koncu a nie miedzy elementami listy

//edit2. niestety zrobilem strasznie glupi blad (sam sie dziwie jak to moglem pominac :))

Przepraszam za klopot i dziekuje za pomoc.


([alex]) #4
#include 

#include 

#include 

using namespace std;



struct node

  {

   int val;

   node *next;

   node(int val,node *next):val(val),next(next) {}

  };


void tworzliste(node *&lista,unsigned cnt)

  {

   srand(time(0));

   while(cnt--) lista=new node(1+rand()%15,lista);

  }


void wynikowa(node *lista)

  {

   if(lista) for(node *i=lista;i->next;i=i->next) i=i->next=new node(0,i->next);

  }


void show(node *lista)

  {

   for(node *i=lista;i;i=i->next) cout<val<<' ';

   cout<
  }


int main()

  {

   node *lista=0;

   tworzliste(lista,10);

   show(lista);

   wynikowa(lista);

   show(lista);

   cin.get();

   return 0;

  }