Przenieś ostatni element na pierwsze miejsce.

0

Cześć! Mam za zadania przenieść ostatni element z listy jednokierunkowej na pierwsze miejsce.
Najpierw znajduję ostatni element listy, a następnie ustawiam sobie wskaźnik na przedostatni element.

void Przenies(node*&H){
    if(H != NULL && H->next != NULL){
        node*p = H;
        while(p->next != NULL){
            p = p->next;
        };
        node*e = new node;
        e->next = p;
        p->next = H;
        p->next->val = H->val;
        p->next->next = H->next;
        e->next = NULL;
  
    }
}

Oto fragment kodu, który nietety nie działa. Czy ktoś umiałby wytłumaczyć mój błąd w rozumowaniu?
Z góry bardo dziękuję !

0
Alexandr.r napisał(a):
        e->next = p;
        ...
        e->next = NULL;
        ...

Widać?
Aczkolwiek to nie jest jedyny problem.
Skoro chcesz przenieść to po kiego ci new?
Nie masz delete więc masz wyciek pamięci.

0
_13th_Dragon napisał(a):
Alexandr.r napisał(a):
        e->next = p;
        ...
        e->next = NULL;
        ...

Widać?
Aczkolwiek to nie jest jedyny problem.
Skoro chcesz przenieść to po kiego ci new?
Nie masz delete więc masz wyciek pamięci.

Dziękuję, już wszystko wiem, działa :)

0

Optymalnie to chyba:

void rotate_down(node *&head)
{
    if((head)&&(head->next))
	{
        node **last=&(head->next);
        while((*last)->next) last=&((*last)->next);
        (*last)->next=head;
        head=*last;
        *last=nullptr;
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1