Piccolo programma in c

Pubblicità

armies

Utente Attivo
Messaggi
167
Reazioni
8
Punteggio
49
Ciao a tutti,
sto cercando di risolvere un piccolo problema preso da un esame di ingegneria informatica in C. Il testo e' il seguente:
Sia data una lista i cui elementi appartengono alla seguente struttura ListNode:

struct ListNode {
Data info;
ListNode *next;
};
dove ogni elemento contiene un valore intero:

typedef int Data;

Implementare la seguente funzione C:

ListNode *subset(ListNode *list);

che data in input una lista concatenata list, restituisca il puntatore ad una nuova lista concatenata che contiene i soli elementi di list i cui valori sono maggiori dell'elemento ad essi successivo. L'ultimo valore di list deve essere sempre incluso. L'ordine degli elementi della lista ritornata dovra' essere quello della lista di input.

Questo e' quello che sono riuscito a fare
Codice:
ListNode *newNode(Data d) {
  ListNode *n = (ListNode *)malloc(sizeof(ListNode));
  n->next     = NULL;
  n->info     = d;
  return n;
}

ListNode* subset(ListNode *list) {
  ListNode* first = NULL;
  ListNode* last  = NULL;
  int nextValue   = -1;


  if (list != NULL) {
    first = newNode(list->info);
    last = first;
    list = list->next;
    nextValue = last->info;
}


  while(list!=NULL) {
    
      if( (list->info > nextValue) ) {
      first->next = newNode(list->info);
      first = first->next;
      nextValue = list->info;
    
  
}
     list=list->next;
  }


  return first;
}

Riesco a creare correttamente la nuova lista, quello che non riesco a fare e' inserire l'ultimo elemento che deve essere sempre presente.
Grazie anticipatamente
 
Ultima modifica:
Invece di confrontare list con NULL, confronta list->next con NULL ( es while(list->next != NULL)).
Se list->next è NULL ti basta aggiungere un nuovo nodo con il valore di list (che è ancora il tuo nodo attuale)
 
Sei sicuro che funzioni?

il primo if() (quello che ho riportarto sopra) e' inutile, devi fare tutti nel ciclo while(). Se l'elemento e' l'ultimo, aggiungilo senza fare il confronto.
Il ciclo while() e' comunque completamente sbagliato, NON devi modificare la variabile first (che e' anche il valore di ritorno) in quanto e' la testa della nuova lista, la devi inzializzare UNA VOLTA sola. Le variabili last e nextValue sono inutili, ti serve solo una variabile di tipo ListNode* da usare per il nodo corrente all'interno del ciclo while().
 
Pubblicità
Pubblicità
Indietro
Top