Gestione delle code-liste

Sto lavorando alla gestione delle code e ho scritto questo programma. Non compila e penso sia per via che non riesce a collegare correttamente gli elementi della lista; la funzione print non stampa.

#include <iostream>
#include <stdbool.h> //solo per i booleani mi tocca
using namespace std;

//lista
struct ListNode{
	int data;
	struct ListNode* next;
	ListNode(){data=0; next=NULL;} //costruttore di default
	ListNode(int x, ListNode* n){data=x; next=n;} //costruttore1
	ListNode(ListNode* p){data=p->data;	next=p->next;} //costruttore2
};
typedef struct ListNode* LNode;

//coda
struct QueueNode{
	LNode testa;
	LNode coda;
	QueueNode(){testa=NULL; coda=NULL;}
	QueueNode(LNode lista){
		testa=lista;
		LNode cursore=new ListNode(lista);
		while(cursore->next!=NULL){cursore=cursore->next;}
		coda=cursore;
		}
};
typedef struct QueueNode* QNode;

//funzioni
QNode putcoda(QNode queue, int data){
	LNode elemento=new ListNode(data, NULL);
	queue->coda->next=elemento;
	queue->coda=elemento;
	return queue;
}
QNode puttesta(QNode queue, int data){
	LNode elemento=new ListNode(data, queue->testa);
	queue->testa->next=elemento;
	queue->testa=elemento;
	return queue;
}

int getcoda(QNode queue){
	return queue->coda->data;
}

int gettesta(QNode queue){
	return queue->testa->data;
}

void print(LNode lista){
	LNode cursore = new ListNode(lista);
	while(cursore){
		cout << cursore->data << endl;
		cursore=cursore->next;
	}
}

bool search(QNode queue, int data){
	LNode cursore = new ListNode(queue->testa);
	while(cursore->next!=NULL){
		if(cursore->data==data) {return true;}
		cursore=cursore->next;
	}
	return false;
}

int main() {
	LNode lista=new ListNode(lista);
	QNode coda= new QueueNode(lista);
	
	coda=putcoda(coda,1);
	coda=putcoda(coda,2);
	coda=putcoda(coda,3);
	coda=putcoda(coda,4);
	print(lista);
	
	return 0;
}

Nella funzione print non sono molto sicuro di quel:
LNode cursore = new ListNode(lista);
Non è più semplice fare LNode cursore = lista; ?

Poi, da quel che so, in struct QueueNode dovresti fare il distruttore per deallocare la memoria con un delete cursore. :smiley:

1 Mi Piace

Ho corretto, grazie mille per entrambi i suggerimenti