Informatică, întrebare adresată de iSmash, 8 ani în urmă

cum introduc un nod nou inaintea unui nod deja existent ce contine informatia '5'. in lista simplu inlantuita? c++ va rog help. nu am nevoie de tot codul. am nevoie de un exemplu doar

Răspunsuri la întrebare

Răspuns de ElAce
0

≥ Solutie:

#include <iostream>

struct Node {

int num;

Node* next;

};

Node* head;

void test() {

Node* cur = head;

while (cur) {

std::cout << cur->num << std::endl;

cur = cur->next;

}

}

void adauga(int n) {

Node* nod = (Node*)malloc(sizeof(struct Node));

(*nod).num = n;

(*nod).next = head;

head = nod;

}

void raspuns(int ordine, int n) {

Node* prev;

Node* cur = head;

Node* curx = head;

int ind = 0;

Node* nodNou = (Node*)malloc(sizeof(struct Node));

nodNou->num = n;

while (curx) {

if (ordine == 0) {

nodNou->next = head;

head = nodNou;

break;

}

curx = cur;

if (ind == ordine) {

if (prev) { prev->next = nodNou; }

if (curx) { nodNou->next = cur; }

break;

}

ind++;

prev = cur;

cur = cur->next;

}

}

int main()

{

for (int i = 1; i <= 5; ++i)

adauga(i);

test();

raspuns(0, 7);

test();

}

≥ Explicatie:

  • Se face un loop pana ajungerea la un nod aflat la pozitia X si se tine cont de nodul din urma si nodul dinainte.
  • Daca nodul este adaugat in mijlocul lantului, atunci se schimba nodul la care cel din urma il are in lant la cel adaugat, si la nodul adaugat se schimba lantul spre nodul care era in aceasta pozitie.
  • Daca nodul este adaugat la pozitia 0, atunci el devine "capul" nodului si nu este nevoie de facut o repetare sau salavarea nodului din urma. Simplu, se schimba capul lantului vechi cu capul lantului nou.
  • Daca nodul este adaugat la cea mai mare pozitie posibila a lantului, atunci acesta nu are un nod din inainte, si ramane ca avand doar nodul cel din urma, care il are acum in lant pe cel adaugat curent.

iSmash: aveam nevoie de lista simplu inlantuita, fara prev. dar aia e, deja nu imi ai trebuie
Alte întrebări interesante