单链表逆置--三种经典办法

来源:互联网 发布:软件开发月报 编辑:程序博客网 时间:2024/04/28 02:32
typedef struct ListNode{
ListNode *next;
Element data;
}ListNode, *pList;
这是我做的单链表逆序三个不同的算法,2个递归的以及一个非递归的

pList ReverseList( pList head ){
if( !head || !(head->next) )
return head;
pList ph = ReverseList( head->next );
head->next->next = head;
head->next = NULL;
return ph;
}
pList ReverseList( pList head , pList &tail ){
if( !head || !(head->next) ){
tail = head;
return head;
}
pList pt;
pList ph = ReverseList( head->next , pt );
pt->next = head;
head->next = NULL;
tail = head;
return ph;
}
pList ReverseListNonRec( pList head ){
if( !head || !(head->next) )
return head;
pList h = NULL,h1 = head;
while( head ){
h1 = head->next;
head->next = h;
h = head;
head = h1;
}
return h;
}