递归和非递归方法实现链表反转
#include<iostream>
using namespace std;
template <typename T>
class Node{
public:
Node():next(NULL){}
T m_data;
Node* next;
};
typedef Node<int> list_int;
list_int* ReserveList(list_int* plist, list_int* &result){//递归方法
if (plist->next == NULL){
result = plist;
return plist;
}
else{
list_int* p_temp = ReserveList(plist->next, result);
p_temp->next = plist;
return plist;
}
}
list_int* None_di_gui(list_int* plist){//非递归
if (!plist||!plist->next)
return plist;//如果为空或者只有一个元素直接返回。
list_int* temp(plist->next);
while (temp){
list_int* p = temp->next;//当要进行反转操作时,记住保存它的下一个节点
temp->next = plist;
plist = temp;
temp = p;
}
return plist;
}
int main(){
list_int* plist = new list_int;
list_int* p = plist;
for (int i = 0; i < 6; ++i,p=p->next){//构造一个0-1-2-3-4-5-6的单链表
p->m_data = i;
p->next = new list_int;
}
p->m_data = 6;
list_int* result = NULL;
//ReserveList(plist, result);
//plist->next = NULL;
result = None_di_gui(plist);
plist->next = NULL;
return 0;
}