# PBinfo #4165 – FInserareKX – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:

struct Nod
{
    int info;
    Nod *leg;
};
în care câmpul info memorează un număr întreg, iar câmpul leg memorează adresa următorului element al listei.

Cerinţa
Să se scrie o funcție C++ cu următorul prototip:

void FInserareKX(Nod * &head, int k, int x);
care, în lista pentru care primul element are adresa memorată în pointerul head, inserează pe poziția k un nou nod cu informația x. Dacă lista are mai puțin de k noduri, inserarea se face la sfârșitul listei, iar dacă k ≤ 1, atunci inserarea se va face la începutul listei. Lista poate fi inițial și vidă, caz în care head = NULL. De exemplu, dacă lista conține inițial informațiile 1, 2, 3, 4, 5, k = 3 și x = 100, atunci lista devine: 1, 2, 100, 3, 4, 5.

Important
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

## Cod sursă C++

```cpp
void FInserareKX(Nod * &head, int k, int x)
{
    Nod *p, *q;
    if (k <= 1 || head == NULL)
    {
        p = new Nod;
        p->info = x;
        p->leg = head;
        head = p;
        return;
    }
    for (p = head; p->leg != NULL && k > 2; p = p->leg)
        k--;
    q = new Nod;
    q->info = x;
    q->leg = p->leg;
    p->leg = q;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/4165)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/4165/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-4165/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
