#include <iostream>
using namespace std;
typedef struct NODETYPE{
int value;
struct NODETYPE * next;
}NODE;
//构造链表
NODE * InitLinklist()
{
const int SIZE = 10;
NODE * header = new NODE;
header->value = rand() % 100;
NODE * cur = header;
for(int i=1;i<SIZE;++i)
{
NODE * node = new NODE;
node->value = rand()%100;
node->next = NULL;
cur->next = node;
cur = node;
}
return header;
}
//打印链表
void printLinklist(NODE * linklist)
{
NODE * cur = linklist;
for(;cur;){
cout << cur->value << " ";
cur = cur->next;
}
cout << endl;
}
//迭代逆序
NODE * ReverseLinklist(NODE * linklist)
{
NODE * cur = linklist;
NODE * next = cur->next;
cur->next = NULL;
for(;next;)
{
NODE * next2 = next->next;
next->next = cur;
cur = next;
next = next2;
}
return cur;
}
//递归逆序
NODE * RecursionReverseLinklist(NODE ** header,NODE * linklist)
{
if( !linklist || !linklist->next )
{
*header = linklist;
return linklist;
}
else
{
RecursionReverseLinklist(header,linklist->next)->next = linklist;
linklist->next = NULL;
return linklist;
}
}
//
int main(int argc, char *argv[])
{
NODE * linklist = NULL;
//创建链表
cout << "orignal linklist:" << endl;
linklist = InitLinklist();
printLinklist(linklist);
//迭代逆序
cout << "iterat reverse:" << endl;
linklist = ReverseLinklist(linklist);
printLinklist( linklist );
//递归逆序
cout << "recursion reverse:" << endl;
RecursionReverseLinklist(&linklist,linklist);
printLinklist( linklist );
cout << "end." << endl;
return 0;
}
单链表的逆序
最新推荐文章于 2021-07-12 18:07:07 发布