TADM2E 3.23

From Algorithm Wiki
Revision as of 18:13, 11 September 2014 by Algowikiadmin (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Iterative version with three variables

<pre> 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;

} </pre >

Iterative version with one variable

<pre> 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);
       
   }

} </pre>


Recursive Version

<pre> 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;

} </pre> --Max 07:36, 16 June 2010 (EDT)