The algorithm to reverse a linked list by rearranging the required pointers is given as follows: The pseudo-code to show the working of the algorithm is given as follows: //Define the function to reverse a list. node* reverseList(node* head) { //Declare and initialize the required pointer variables. node* prev_node; node* cur_node; node* next_node; prev_node = NULL; next_node = NULL; cur_node = head; //Traverse the whole list using while loop. while(cur_node != NULL) { //Rearrange the pointers to reverse the list. next_node = cur_node->next; cur_node->next = prev_node; prev_node = cur_node; cur_node = next_node; } //Make the recent previous node as head of the list. head = prev_node; //Return the head of the list. return head; } Solution The algorithm to reverse a linked list by rearranging the required pointers is given as follows: The pseudo-code to show the working of the algorithm is given as follows: //Define the function to reverse a list. node* reverseList(node* head) { //Declare and initialize the required pointer variables. node* prev_node; node* cur_node; node* next_node; prev_node = NULL; next_node = NULL; cur_node = head; //Traverse the whole list using while loop. while(cur_node != NULL) { //Rearrange the pointers to reverse the list. next_node = cur_node->next; cur_node->next = prev_node; prev_node = cur_node; cur_node = next_node; } //Make the recent previous node as head of the list. head = prev_node; //Return the head of the list. return head; }.