单链表的设计和非递归,递归逆序方法源代码,dev-c++下可直接运行.

//自己从网上总结并自己修改的代码,应该算比较清晰了.

#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");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值