PDA

View Full Version : [C] Doubly linked list


magix2003
20-03-2007, 15:49
Salve a tutti,
ho un esercizio da risolvere e sinceramente non ho idea di come fare. L'esercizio dice praticamente data una lista doppiamente collegata, bisogna creare una funzione ListSelect(list, int max) che crei un'altra lista con tutti gli elementi della lista minori o uguali a max. L'esercizio dice espressamente che non bisogna creare una copia del nodo. Per il momento ho provato a fare qualcosa del genere ma con pessimi risultati:


#include <stdio.h>
#include <stdlib.h>

struct node {
int key;
struct node *prev;
struct node *next;
};

struct node *root = NULL;

struct node *ListSelect(struct node *head, int max){
struct node *p = head;
struct node *nuova = NULL;
struct node *aux = (struct node *)malloc(sizeof(struct node));;
struct node *bah = nuova;
while (p != NULL){
if (p->key <= max){
if (bah == NULL){
aux->key = p->key;
ListInsert(bah, aux->key);
}else{
//aux->prev = p;

}
}
p = p->next;
}
print(nuova);
return head;
}



Grazie in anticipo

cionci
20-03-2007, 16:12
Se non bisogna creare una copia del nodo l'unica cosa che mi viene in mente è creare un lista di puntatori a nodi ;)

struct node2
{
struct node *info;
struct node2 *next;
struct node2 *prev;
};

Se non puoi creare una copia del nodo, quello sopra è l'unico modo per mantenere intatta la lista iniziale.

magix2003
20-03-2007, 18:38
Se non bisogna creare una copia del nodo l'unica cosa che mi viene in mente è creare un lista di puntatori a nodi ;)

struct node2
{
struct node *info;
struct node2 *next;
struct node2 *prev;
};

Se non puoi creare una copia del nodo, quello sopra è l'unico modo per mantenere intatta la lista iniziale.

Ok grazie mille ho risolto con il tuo consiglio.