Difference between revisions of "TADM2E 3.23"
From Algorithm Wiki
(5 intermediate revisions by one other user not shown) | |||
Line 69: | Line 69: | ||
<pre> | <pre> | ||
− | public | + | void reverseList(){ |
+ | head.reverse(null); | ||
+ | Node temp=head; | ||
+ | head=tail; | ||
+ | tail=temp; | ||
+ | } | ||
+ | |||
+ | public void reverse(Node previousNode){ | ||
if(next!=null) | if(next!=null) | ||
next.reverse(this); | next.reverse(this); | ||
next=previousNode; | next=previousNode; | ||
− | |||
} | } | ||
</pre> | </pre> | ||
− | - | + | |
+ | == Recursive Version 3 (C++) == | ||
+ | |||
+ | <pre> | ||
+ | struct node{ | ||
+ | int data; | ||
+ | node* next; | ||
+ | }; | ||
+ | |||
+ | node* new_head; // store the new head after calling reverse_sll function | ||
+ | |||
+ | void reverse_sll(node* current_node, node* prev_node=NULL){ | ||
+ | if(current_node==NULL) | ||
+ | new_head = prev_node; | ||
+ | else{ | ||
+ | reverse_sll(current_node->next, current_node); | ||
+ | current_node->next=prev_node; | ||
+ | } | ||
+ | } | ||
+ | </pre> |
Latest revision as of 02:24, 13 July 2019
Contents
Iterative version with three variables
Node* ReverseList( Node * List ) { Node *temp1 = *List; Node * temp2 = NULL; Node * temp3 = NULL; while ( temp1 ) { *List = temp1; //set the head to last node temp2= temp1->pNext; // save the next ptr in temp2 temp1->pNext = temp3; // change next to privous temp3 = temp1; temp1 = temp2; } return *List; }
Iterative version with one variable
Node* reverse (node* head) { node *temp=NULL; while(true) { if(head->next==NULL) { head->next=temp; break; } // Swap(head->next, temp) head->next = (node *)((unsigned long) head->next ^(unsigned long) temp); temp = (node *)((unsigned long) head->next ^(unsigned long) temp); head->next =(node *) ((unsigned long) head->next ^ (unsigned long)temp); // Swap(head, temp) head = (node *)((unsigned long) head ^(unsigned long) temp); temp =(node *) ((unsigned long) head ^(unsigned long) temp); head =(node *) ((unsigned long) head ^ (unsigned long)temp); } }
Recursive Version
Node* Reverse(Node*head) { Node* temp=NULL; if(head==NULL) { return NULL; } if(head->next==NULL) return head; temp=Reverse(head->next); head->next->next=head; head->next=NULL; return temp; }
--Max 07:36, 16 June 2010 (EDT)
Recursive Version 2 (Java)
void reverseList(){ head.reverse(null); Node temp=head; head=tail; tail=temp; } public void reverse(Node previousNode){ if(next!=null) next.reverse(this); next=previousNode; }
Recursive Version 3 (C++)
struct node{ int data; node* next; }; node* new_head; // store the new head after calling reverse_sll function void reverse_sll(node* current_node, node* prev_node=NULL){ if(current_node==NULL) new_head = prev_node; else{ reverse_sll(current_node->next, current_node); current_node->next=prev_node; } }