|
测试环境:vs2010 windows7
逆序分别采用递归调用和链表头插法实现逆序。
具体代码如下:
?
#include
#include
using namespace std; class LinkList { private: struct Node { struct Node *next; int value; }; Node *phead; void reverse_use_recursion(Node *pnode) { if(pnode==nullptr||pnode->next==nullptr) { phead=pnode; return; } reverse_use_recursion(pnode->next); pnode->next->next=pnode; pnode->next=nullptr; } public: LinkList() { phead=nullptr; } void initLinkList() { cout<<初始化链表以-1结束<
>tmp; while(tmp!=-1) { if(phead==nullptr) { phead=new Node; phead->next=nullptr; phead->value=tmp; ptmp=phead; }else { ptmp->next=new Node; ptmp=ptmp->next; ptmp->value=tmp; ptmp->next=nullptr; } cin>>tmp; } } void print() { Node *pnode=phead; while(pnode!=nullptr) { cout<
value<
next; } } void clear() { Node *pnode=phead; while(pnode!=nullptr) { Node *ptmp=pnode; pnode=pnode->next; delete ptmp; } phead=nullptr; } void reverse_recursion()//采用递归逆序 { Node *pnode=phead; reverse_use_recursion(pnode); } void reverse_recycle()//采用链表的头插入法实现逆序 { Node *pnode=phead; phead=nullptr; Node *ptmp; while(pnode!=nullptr) { if(phead==nullptr) { phead=pnode; ptmp=pnode; pnode=pnode->next; ptmp->next=nullptr; } else { ptmp=phead; phead=pnode; pnode=pnode->next; phead->next=ptmp; } } } ~LinkList() { this->clear(); } }; int main() { LinkList li; li.initLinkList(); li.print(); li.reverse_recycle(); li.print(); li.reverse_recursion(); li.print(); system(pause); return 0; }
?
?
|