моя функция обратной связи связанного списка дает правильный результат. но я
смущенный.обратный связанный список рекурсивно
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;
}
первый вызов до = 12 дворняжки = 5 второго вызова предварительно = 5 дворняжки = 4 третьего вызова предварительно = 4 дворняжки = 3
3->next = NULL //base condition fullfilled
so it will exit (3rd call)
reverse will start from
second call
pre = 5
cur = 4
моего обращенный связана список должен быть 4-> 5-> 12
, но он производит 3-> 4-> 5-> 12 (правильный перевернутый список)
Почему он дает правильный результат. PLS объяснить ????
каждого рекурсивного вызова будет создавать отдельную сферу. поэтому при обратном вызове (3) он возвращается. поэтому объем обратной (3) будет закончен. и объем обратного (4) вступает в силу. в это время значение тока было 4. – raton
@raton Да при каждом обратном вызове у вас есть новая область действия, но вы забываете, что область действия была восстановлена после 'reverse (cur):' У вас есть pre = 4; cur = 3; задний ход (3); 3-> next = 4; 4-> next = NULL; 'что не ясно? – fghj