C代码
/**
*链表逆序的递归/非递归算法
*/
#include
typedef int Item;
typedef struct node
{
Item item;
struct node *next;
}Node, *List;
/*reverse1~2是不带头结点的逆序算法*/
List reverse1(List l)
{
Node *p1,*p2;
if(l==NULL)
return l;
p1=l->next;
l->next=NULL;
while(p1!=NULL){
p2=p1->next;
p1->next=l;
l=p1;
p1=p2;
}
return l;
}
List reverse2(List l)
{
if(l==NULL || l->next==NULL)
return l;
Node *p=reverse2(l->next);
l->next->next=l;
l->next=NULL;
return p;
}
/*reverse3~4是带头结点链表的逆序算法*/
void reverse3(List l)
{
Node *p1,*p2,*p3;
if(l==NULL || l->next==NULL)
return;
p1=l->next;
p2=p1->next;
p1->next=NULL;
while(p2!=NULL){
p3=p2->next;
p2->next=p1;
p1=p2;
p2=p3;
}
l->next=p1;
}
void reverse4(List l, Node *first)/*此算法不是很好,需要在函数外判断l!=NULL*/
{
if(first==NULL || first->next==NULL){
l->next=first;
return;
}
reverse4(l,first->next);
first->next->next=first;
first->next=NULL;
}
作者“Ackerman's Blog”