meine verkettete reverse-funktion gibt das richtige ergebnis. aber ich bin
verwirrt.eine verkettete rekursiv reversed
linked list= 12->5->4->3
as per my reverse function the result should be
4->5->12
but fortunately it produces the correct reversed list
3->4->5->12.
pls help me to understand what happening
//head_ref global variable
struct n* reverse(struct n *head){
struct n *pre,*cur; //temp variable for first and second node
if(head->next==NULL){
head_ref = head; // head_ref global variable initialized with head pointer
return;
}
pre = head;
cur = head->next;
reverse(cur);
cur->next = pre ;
pre->next = NULL;
}
ersten Anruf pre = 12 cur = 5 zweiten Anruf pre = 5 cur = 4 3. Aufruf pre = 4 cur = 3
3->next = NULL //base condition fullfilled
so it will exit (3rd call)
reverse will start from
second call
pre = 5
cur = 4
meine umgekehrt verknüpft Liste sollte 4-> 5-> 12
sein, aber es produziert 3-> 4-> 5-> 12 (korrekte umgekehrte verkettete Liste)
warum es das korrekte Ergebnis gibt. Bitte erklären ????
jeder rekursive Aufruf separate Rahmen schaffen wird. Wenn reverse (3) aufgerufen wird, wird es zurückgegeben. Der Umfang von reverse (3) ist damit beendet. und der Umfang der Umkehrung (4) wird in Kraft treten. zu diesem Zeitpunkt war der cur-Wert 4. – raton
@raton Bei jedem Aufruf von reverse haben Sie einen neuen Bereich, aber Sie vergessen, dass der Bereich nach "reverse (cur)" wiederhergestellt wurde. Sie haben 'pre = 4; cur = 3; rückwärts (3); 3-> nächste = 4; 4-> next = NULL; 'was ist nicht klar? – fghj