Advertisement
JosepRivaille

X97290: Còpia d'una cadena de nodes doblement encadenats

Dec 25th, 2015
866
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. node_llista* copia_node_llista_it (node_llista* m, node_llista* oact, node_llista* &u, node_llista* &a)
  2. /* Pre: cert */
  3. /* Post: si m és NULL, el resultat, u i a són NULL; en cas
  4.        contrari, el resultat apunta al primer node d'una cadena de
  5.        nodes que són còpia de la cadena que té el node apuntat per m
  6.        com a primer, u apunta a l'últim node, a és o bé NULL si oact
  7.        no apunta a cap node de la cadena que comença amb m o bé apunta
  8.        al node còpia del node apuntat per oact */
  9. {
  10.   if (m == NULL) {
  11.     u = a = NULL;
  12.     return m;
  13.   }
  14.   else {
  15.     a = NULL;
  16.     node_llista* primer_node_copia = NULL;
  17.     bool first = true;
  18.     node_llista* aux = NULL;
  19.     while (m != NULL) {
  20.       node_llista* nou_node = new node_llista;
  21.       nou_node->info = m->info;
  22.       if (aux != NULL) aux->seg = nou_node;
  23.       nou_node->ant = aux;
  24.       if (first) {
  25.     first = false;
  26.     primer_node_copia = nou_node;
  27.       }
  28.       if (oact == m) {
  29.     a = nou_node;
  30.       }
  31.       aux = nou_node;
  32.       m = m->seg;
  33.     }
  34.     u = aux;
  35.     return primer_node_copia;
  36.   }
  37. }
  38.  
  39. void borrar_llista(node_llista* n) {
  40.   if (n != NULL) {
  41.     borrar_llista(n->seg);
  42.     delete n;
  43.     n = NULL;
  44.   }
  45. }
  46.  
  47. Llista& operator=(const Llista& original)
  48. /* Pre: cert */
  49. /* Post: El p.i. passa a ser una còpia d'original i qualsevol
  50.    contingut anterior del p.i. ha estat esborrat (excepte si el
  51.    p.i. i original ja eren el mateix objecte) */
  52. {
  53.    if (this != &original) {
  54.       longitud = original.longitud;
  55.       borrar_llista(this->primer_node);
  56.       primer_node = copia_node_llista_it(original.primer_node, original.act, ultim_node, act);
  57.    }
  58.    return *this;
  59. }
  60.  
  61. //JosepRivaille
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement