算法导论里的一道题目,也是很经典的题目,遍地都是,更常常以面试题面孔出现。下面给出一种思路,时间为O(N),N为节点数或者说链表长度
//前置条件:head指向链表的首节点
//后置条件:函数返回反转后指向首节点的指针,也即原链表最后一个元素。
node* Reverse(node* &head)
{
node *temp;
node *p1,*p2,*p3;
if(head==NULL)
return NULL;
if(head->next==NULL)
return head;
//至少两个节点
else
{
p1=head;
p2=head->next;
p3=p2->next;
head->next=NULL;
do
{
p2->next=p1;
p1=p2;
p2=p3;
if(p3)//少了判断就会程序出错
{
p3=p3->next;
}
}while(p2);
head=p1;
return head;
}
}