/** *链表逆序的递归/非递归算法 */ #include <stdio.h> 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; }