您的位置:首页 > 理论基础 > 数据结构算法

好好学习数据结构之链表反转

2013-11-14 09:50 471 查看
        
如何把一个单链表进行反转,这个问题我已经被问过两次,一次是百度面试,另一次是中科院计算所。

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

       
方法2:使用三个指针遍历单链表,逐个链接点进行反转。

     
  方法3:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。

        
方法1浪费空间,不建议。

        
方法2代码如下:

ActList* ReverseList2(ActList* head)

{  



        

if(NULL==head|| NULL==head->next)


         
return head;      



           
ActList* p;


          
ActList* q;  



           
ActList* r;  


          
p = head;  


 
        q = head->next;   



       
head->next = NULL;  



      
while(q)


      
{


          
r = q->next; //


         
q->next = p;    



         
p = q; //



        
q = r; //  


[b]      
}
[/b]

    
head=p; 



return head;  



 




[b]          
[/b]方法3:

 view
plainActList* ReverseList3(ActList* head) 



    ActList* p; 

    ActList* q; 

    p=head->next; 

    while(p->next!=NULL){ 

        q=p->next; 

        p->next=q->next; 

        q->next=head->next; 

        head->next=q; 

    } 

 

    p->next=head;//相当于成环 

    head=p->next->next;//新head变为原head的next 

    p->next->next=NULL;//断掉环 

    return head;   

}



    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息