链表反转的递归和非递归算法

来源:互联网 发布:免费外文文献数据库 编辑:程序博客网 时间:2024/05/14 19:05
struct node{int data;node *next;};

递归算法:

node * Reverse(node *List,node*pre=NULL){    if(List==NULL) return List;    node *next = List->next;    List->next=pre;    return next==NULL?List:Reverse(next,List);}


非递归算法:

node * Reverse(node*head){    if(head==NULL)return NULL;    node*pre=head;    node*p=pre->next;    node *q=NULL;    while(p!=NULL)    {        q=p->next;        p->next=pre;        if(pre==head)  //防止出现环            pre->next=NULL;        pre=p;        p=q;    }    return pre;}



0 0