Advertisement
Guest User

Untitled

a guest
Jun 19th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.75 KB | None | 0 0
  1. Llista reorganitzar_out(const T& x) const {
  2.     Llista l, l2;
  3.     if (longitud == 0) return l;
  4.     l.longitud = longitud;
  5.     node_llista* iterador = primer_node;
  6.     while (iterador != nullptr) {
  7.         if (iterador->info <= x) { // CAS 1
  8.             if (l.ultim_node == nullptr) { // si la llista esta buida
  9.                 l.ultim_node = new node_llista;
  10.                 l.ultim_node->info = iterador->info;
  11.                 l.ultim_node->ant = nullptr;
  12.                 l.ultim_node->seg = nullptr;
  13.                 l.primer_node = l.ultim_node;
  14.             }
  15.             else { // si hi ha elements a la llista
  16.                 l.ultim_node->seg = new node_llista;
  17.                 (l.ultim_node->seg)->info = iterador->info;
  18.                 (l.ultim_node->seg)->seg = nullptr;
  19.                 (l.ultim_node->seg)->ant = l.ultim_node;
  20.                 l.ultim_node = l.ultim_node->seg;
  21.             }
  22.             l.act = l.ultim_node;
  23.         }
  24.         else { //CAS 2
  25.             if (l2.ultim_node == nullptr) { // si la llista esta buida
  26.                 l2.ultim_node = new node_llista;
  27.                 l2.ultim_node->info = iterador->info;
  28.                 l2.ultim_node->ant = nullptr;
  29.                 l2.ultim_node->seg = nullptr;
  30.                 l2.primer_node = l2.ultim_node;
  31.             }
  32.             else { // si hi ha elements a la llista
  33.                 l2.ultim_node->seg = new node_llista;
  34.                 (l2.ultim_node->seg)->info = iterador->info;
  35.                 (l2.ultim_node->seg)->seg = nullptr;
  36.                 (l2.ultim_node->seg)->ant = l2.ultim_node;
  37.                 l2.ultim_node = l2.ultim_node->seg;
  38.             }
  39.             l2.act = l2.primer_node;
  40.         }
  41.         iterador = iterador->seg;
  42.     }
  43.    
  44.     //concatenem les dos, no poden estar les dos buides
  45.     if (l2.primer_node == nullptr) { //segona llista buida
  46.         l.act = l.ultim_node;
  47.     }
  48.     else if (l.primer_node == nullptr) { //primera llista buida
  49.         l.primer_node = l2.primer_node;
  50.         l.ultim_node = l2.ultim_node;
  51.         l.act = l2.primer_node;
  52.     }
  53.     else { //cap buida
  54.         l.act = l2.primer_node;
  55.         l2.primer_node->ant = l.ultim_node;
  56.         l.ultim_node->seg = l2.primer_node;
  57.         l.ultim_node = l2.ultim_node;
  58.     }
  59.     l2.primer_node = l2.ultim_node = l2.act = nullptr;
  60.     l2.longitud = 0;
  61.     return l;
  62. }
  63. /* Pre: cert */
  64. /* Post: el resultat és una llista que conté els mateixos
  65. elements que el p.i. tal que tots els més petits o iguals
  66. que x al p.i. precedeixen als més grans que x al p.i. però
  67. sempre respectant l'ordre que hi havia entre ells al p.i.
  68. L'element actual de la llista retornada és el primer dels
  69. més grans que x, si existeix, sinó es situa a la detra del
  70. tot. El p.i. no es modifica */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement