测试环境: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;
}