Witam
Potrzebuje zmienić head'a listy cyklicznej jednokierunkowe na jego następnika. Dla przykłady gdy mam w liście 3 elementy o kluczach 1 2 3 i "jedynka" jest czołem zrobić tak aby nim była "dwójka" bez straty żadnego węzła. Ma ktoś jakieś pomysły. Głowię się nad z tym, a w internecie nie mogę znaleźć żadnych przykładów.
Z góry dzięki
0
2
Jeśli masz jednokierunkową listę cykliczną a->b->c->a
to nie bardzo widzę jaki masz problem. head = head->next;
?
0
Tak też robiłem, ale nie jest to jednak dobry pomysł na rozwiązanie mojego problemu.
Spróbuje inaczej.Posiadam funkcję która dodaje do listy X nowych wylosowanych elementów w porządku rosnącym wg. klucza. Problem w tym że węzeł dodany do listy jako pierwszy zawsze zostanie na 1 miejscu.
Poniżej kod tej funkcji
void dod_X(lista *& head , int X){
int key;
lista *p =head ;
lista *ele = new lista;
for(int i=0;i<X;i++){
p = head ;
ele = new lista;
key=(rand()%19990)+10;
int k;
k=czy(p,key); ///funkcja sprawdzajaca czy wylosowana liczba już wcześniej nie wystąpiła, klucze muszą być unikalne
if(k>0){
ele->key=key;
ele->s1=rand();
ele->s2='Z';
if(p)
{
do{
if(p->next->key > ele->key) break;
p=p->next;
}while(p->next!=head);
ele->next = p->next ;
p->next = ele;
}else {
ele->next = ele; /// jeśli lista jest pusta ele ma zostać head'em
head=ele;}
}
else --i; w przypadku gdy klucz sie powtarza cofnij licznik i losuj ponownie
}
}
Po dodaniu 1500 węzłów i wypisaniu pierwszych 20 otrzymuje takie wyniki:
Jakieś pomysły jak zmodyfikować funkcję by wszystkie węzły były posortowane ?