测试环境:vs2010 windows7
逆序分别采用递归调用和链表头插法实现逆序。
具体代码如下:
#include<iostream> #include<stdlib.h> 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结束"<<endl; int tmp; Node *ptmp; cin>>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<<pnode->value<<endl; pnode=pnode->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; }
版权声明:欢迎转载,如有不足之处,恳请斧正。
时间: 2024-10-29 00:25:11