+ 3

I don't get the logic behind reversing a linked list

 void recursiveReverse(struct Node** head_ref) {     struct Node* first;     struct Node* rest;            /* empty list */     if (*head_ref == NULL)        return;         /* suppose first = {1, 2, 3}, rest = {2, 3} */     first = *head_ref;      rest  = first->next;       /* List has only one node */     if (rest == NULL)     return;    recursiveReverse(&rest);   first->next->next  = first;  first->next= NULL; *head_ref = rest;         }     

23rd Feb 2018, 2:18 PM
Aditya
Aditya - avatar
2 Answers
+ 5
void recursiveReverse(struct Node** head_ref) {     struct Node* first; // Stores first element.     struct Node* rest; // Stores rest of list.     if (*head_ref == NULL) return;       first = *head_ref;      rest  = first->next;     if (rest == NULL) return;    recursiveReverse(&rest); // This reverses the rest part of the list.   first->next->next  = first;  // first->next->next is rest's last element, // which is now linked to first to complete // the reversal. Then to complete the list, // we assign the next of first as NULL. first->next= NULL; *head_ref = rest;       // Now the list is reversed, but head // still points in opp order, so we assign // it with rest.   }   Here is a graphical representation for 2 links: => 1->2->NULL // Original List.Assume 1 as first and // 2 as rest. Operation : first->next->next=first; => 1<-2 // Last element of rear has its next // pointing to first now. Operation : first->next=NULL; => NULL<-1<-2 //Assigned first's next as null. Now // first is the last element.
23rd Feb 2018, 5:56 PM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar
+ 5
@Paul Victor Can you please stop spoiling other's posts?
24th Feb 2018, 7:29 AM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar