//自己从网上总结并自己修改的代码,应该算比较清晰了.
#include <iostream>
#define link_list_size 3
using namespace std;
#define Malloc(x) (x *)malloc(sizeof(x));
typedef struct link_node
{
int size;
int data;
link_node * next;
}link_node,*link_list;
void init_link_list(link_node* head,int i)
{
head->next=NULL;
head->data=i;
head->size=1;
};
void insert_link_node_after_end(int i,link_node* head)
{
link_node* p_move=head;
while(NULL!=p_move->next) p_move=p_move->next;//p_move to end
link_node* new_node=(link_list)malloc(sizeof(link_node));
p_move->next=new_node;//new_node insert to end,put address of new_node to p_move->next
new_node->data=i;
new_node->next=NULL;
head->size++;
};
void show_link_list(link_node *ll)
{
link_list temp=ll;
int _size=ll->size;
for(int i=0;i<_size;i++)
{
cout<<(temp->data)<<endl;
temp=temp->next;
}
};
link_node * reverse_by_recursive(link_node * head)
{
int _size = head->size;
link_node * new_node;
if(!head ) return head;
else if(!head->next) return head;
else
{
new_node=reverse_by_recursive(head->next);
head->next->next = head;
head->next = NULL;
new_node->size=_size;
return new_node;
}
};
link_node* reverse(link_node* head)
{
link_node *prev=NULL,*next=NULL;
int _size = head->size;
while(head)
{
next=head->next;
head->next=prev;
prev=head;
head=next;
}
prev->size = _size;
return prev;
};
int main(int argc, char *argv[])
{
link_node ln1;
link_list head=&ln1;
init_link_list(head,0);
for(int i=1;i<link_list_size;i++)
insert_link_node_after_end(i,head);
show_link_list(head);
link_list new_head_1=reverse(head);
cout<<"-------after reverse------------------"<<endl;
show_link_list(new_head_1);
link_list new_head_2=reverse_by_recursive(new_head_1);
cout<<"-------after reverse_by_recursive------------------"<<endl;
show_link_list(new_head_2);
system("PAUSE");
}