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

注:链表没有伪头部,第一个元素是数据元素

节点定义如下:

struct node
{
int data;
node *next;
};

 

非递归算法:

 1 node * Reverse(node*head)
2 {
3 if(head==NULL)return NULL;
4 node*pre=head;
5 node*p=pre->next;
6 node *q=NULL;
7 while(p!=NULL)
8 {
9 q=p->next;
10 p->next=pre;
11 if(pre==head)//反转后防止出现环
12 pre->next=NULL;
13 pre=p;
14 p=q;
15 }
16 return pre;
17 }

 

递归算法:

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);
}

  

posted on 2011-12-19 21:51  NN小白  阅读(826)  评论(0编辑  收藏  举报