单向链表翻转

时间:2013-3-10     作者:smarteng     分类: 经典算法


struct linka { 
 int data; 
 linka* next; 
}; 
void reverse(linka*& head) {
 if(head ==NULL) return;
 linka *pre, *cur, *ne;
 pre=head; 
 cur=head->next;
 while(cur) { 
     ne = cur->next; //将下一个节点保存
     cur->next = pre; //将当前节点的下一个节点置为当前节点
     pre = cur; //将当前节点保存为前一节点
     cur = ne; //将当前节点置为下一节点
 }
 head->next = NULL; 
 head = pre; 
}

linka* reverse(linka* p,linka*& head) { 
 if(p == NULL || p->next == NULL) { //判断跳出条件
     head=p; return p;//将链表切断,否则会形成回环 
 } else {
     linka* tmp = reverse(p->next,head);
     tmp->next = p; 
     return p; 
 } 
}
标签: 算法