单链表的反转

如何把一个单链表进行反转?

方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。

方法2:使用3个指针遍历单链表,逐个链接点交替使用指针改变链表的指向进行反转。

方法3:从第3个节点到第N-1个节点,依次逐节点插入到第1个节点(head节点)之后,再将第N个节点指向head(成环),然后将此时head的下一个节点设为head,最后将原head指向NULL。

方法4:   递归(没搞懂~)

 

方法2:

  1. ActList* ReverseList2(ActList* head)  
  2. {  
  3. //ActList* temp=new ActList;
  4. if(NULL==head|| NULL==head->next) return head;    //少于两个节点没有反转的必要。
  5.     ActList* p;  
  6.     ActList* q;  
  7.     ActList* r;  
  8.     p = head;    
  9.     q = head->next;  
  10.     head->next = NULL; //旧的头指针是新的尾指针,next需要指向NULL
  11. while(q){  
  12.         r = q->next; //先保留下一个step要处理的指针
  13.         q->next = p; //然后p q交替工作进行反向
  14.         p = q;   
  15.         q = r;   
  16.     }  
  17.     head=p; // 最后q必然指向NULL,所以返回了p作为新的头指针
  18. return head;      

 

方法3:

  1. ActList* ReverseList3(ActList* head)  
  2. {  
  3.     ActList* p;  
  4.     ActList* q;  
  5.     p=head->next;  
  6. while(p->next!=NULL){  
  7.         q=p->next;  
  8.         p->next=q->next;  
  9.         q->next=head->next;  
  10.         head->next=q;  
  11.     }  
  12.     p->next=head;//相当于成环
  13.     head=p->next->next;//新head变为原head的next
  14.     p->next->next=NULL;//断掉环
  15. return head;    

 

 

详见:

看图理解单链表的反转

posted @ 2014-11-19 22:18  zhanbiqiang  阅读(147)  评论(0编辑  收藏  举报