/**
* 只遍历一次单链表,将链表中的元素顺序反过来
* */
#include<iostream>
using namespace std;
struct list_node //链表节点
{
list_node* next;
int val;
};
list_node* reverse_list(list_node* node) //逆序
{
if(node==nullptr)
return nullptr;
else if(node->next==nullptr)
return node;
list_node* tem_node=node->next;
node->next=nullptr;
list_node* app_node;
while(tem_node->next)
{
app_node=tem_node->next;
tem_node->next=node;
node=tem_node;
tem_node=app_node;
}
tem_node->next=node;
return tem_node;
}
void create_test(list_node** pnode,int num) //创建测试用例
{
list_node* node;
list_node* tem=nullptr;
for(int i=0;i<num;++i)
{
node=new list_node();
node->val=i;
if(tem==nullptr)
{
*pnode=node;
}
else
{
tem->next=node;
}
tem=node;
}
}
void traverse_list(list_node* head) //遍历用例
{
while(head!=nullptr)
{
cout<<"==>"<<head->val;
head=head->next;
}
cout<<endl;
}
void delete_nodes(list_node* head) //删除用例
{
list_node* tem;
while(head!=nullptr)
{
tem=head->next;
delete head;
head=tem;
}
}
int main(int argc,char* argv[])
{
list_node* test;
create_test(&test,10);
traverse_list(test);
test=reverse_list(test);
traverse_list(test);
delete_nodes(test);
return 0;
}
g++ -g -Wall -std=c++11 reverse_list.cpp