|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
|
[C] Doubly linked list
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: Codice:
#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; }
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole" |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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. |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
|
Quote:
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole" |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:08.