Ciao, sto provando a creare una funzione che prenda come argomenti due liste e crei una terza lista contenente le prime due
questo è il mio nodo
/*
* node.h
*
* Created on: 09/lug/2013
* Author: gen
*/
#ifndef NODE_H_
#define NODE_H_
template <class t> class list;
template <class t>
class node {
friend class list <t> ;
public:
node(const t&);
private:
t data;
node<t>* next;
node<t>* prev;
};
template <class t>
node<t>::node(const t & d):next(0),data(d){}
#endif /* NODE_H_ */
questa è la lista:
/*
* list.h
*
* Created on: 09/lug/2013
* Author: gen
*/
#ifndef LIST_H_
#define LIST_H_
#include "node.h"
#include <iostream>
using namespace std;
template <class t>
class list {
public:
list();
~list();
bool isEmpty(){ return (firstPtr==0);}
void insertFront(const t& );
void print();
void printBack();
int getDim(){return dim;}
void order();
void swap(node<t> *);
list concatenate(list<t>&l1,list<t>&l2){
list list3;
list3.firstPtr=l2.firstPtr;
list3.lastPtr=l1.lastPtr;
l1.firstPtr->prev=l2.lastPtr->next;
return list3;
}
private:
int dim;
node <t>* firstPtr;
node<t>* lastPtr;
};
template <class t>
list<t>::list():firstPtr(0),lastPtr(0),dim(0){}
template <class t>
list<t>::~list(){
if (!isEmpty()){
node <t> * temPtr;
node <t> * currentPtr=firstPtr;
while (currentPtr!=0){
temPtr=currentPtr;
currentPtr=currentPtr->next;
delete temPtr;
}
}
}
template <class t>
void list<t>::insertFront(const t& value){
node <t> *newPtr=new node<t>(value);
dim++;
if(isEmpty()){
firstPtr=lastPtr=newPtr;
newPtr->prev=0;
}
else{
firstPtr->prev=newPtr;
newPtr->next=firstPtr;
firstPtr=newPtr;
}
}
template <class t>
void list<t>::print(){
if(isEmpty())
cout<<"La lista è vuota";
else {
node <t>*currentPtr=firstPtr;
while (currentPtr!=0){
cout<<currentPtr->data;
currentPtr=currentPtr->next;
}
}
}
template <class t>
void list<t>::printBack(){
if(isEmpty())
cout<<"La lista è vuota";
else{
node <t>*currentPtr=lastPtr;
while(currentPtr!=firstPtr){
cout<<currentPtr->data;
currentPtr=currentPtr->prev;
}
cout<<currentPtr->data;
}
}
#endif /* LIST_H_ */
main:
// creare una lista a puntatori(template) nella quale inserire elementi(template).
//Inoltre richiedeva una funzione printback() che stampasse gli elementi inseriti
//al contrario(dall'ultimo al primo) tramite un ordinamento ricorsivo.
// Il tutto, ovviamente, condito con qualche eccezione qua
//e la(tipo per lista vuota,inserimento errato, ecc.)
#include <iostream>
#include "list.h"
using namespace std;
int main() {
list<int> mylist,mylist2,list3;
mylist.insertFront(1);
mylist.insertFront(2);
mylist.insertFront(3);
mylist.insertFront(4);
mylist.insertFront(5);
cout<<"Prima lista:\n";
mylist.print();
cout<<endl;
mylist.printBack();
mylist2.insertFront(6);
mylist2.insertFront(7);
mylist2.insertFront(8);
mylist2.insertFront(9);
mylist2.insertFront(10);
cout<<"\nSeconda lista:\n";
mylist2.print();
cout<<endl;
mylist2.printBack();
cout<<"\nListe concatenate:\n";
list3.concatenate(mylist,mylist2);
cout<<"\nLa lista ha "<<mylist.getDim()<<" nodi.\n";
//mylist.order();
return 0;
}
il problema sta nella funzione membro concatenate, praticamente il programma si blocca li, non mi da errori, ma in console non fa nulla quando arriva a chiamare la funzione immediatamente precedente alla concatenate, è sbagliata mia funzione?