递归,迭代,堆栈三种方式实现单链表反转(C++)
#author by changingivan
# 2016.04.12
#include <iostream>
#include <stack>
using namespace std; struct Node
{
int val;
Node *next;
}; Node * creat_link()
{
Node *head=NULL;
Node *current=NULL;
Node *tmp=NULL;
int val=0;
int num_node=10;
for(int i=0;i<num_node;i++)
{
val=i+1;
if(i==0)
{
current=(Node*)new(Node);
current->val=val;
current->next=NULL;
head=current;
}
else
{
tmp=(Node*)new(Node);
tmp->val=val;
tmp->next=NULL;
current->next=tmp;
current=current->next; }
}
return head;
} void show_display_link(Node * head)
{
Node * current=head;
while(current!=NULL)
{
cout<<current->val<<endl;
current=current->next; }
cout<<"finish!"<<endl;
} Node * reverse_iteration_version(Node * head)
{
Node * current=NULL;
Node * next_node=NULL;
Node * pre=NULL;
current=head;
pre=head;
next_node=current->next;
current->next=NULL;
while(next_node!=NULL)
{
pre=current;
current=next_node;
next_node=next_node->next;
current->next=pre;
}
head=current;
return head;
} Node * reverse_stack_version(Node * head)
{
stack <Node * > stack_for_link;
Node * current,* tmp,*new_head;
current=head;
while(current!=NULL)
{
stack_for_link.push(current);
current=current->next;
}
current=stack_for_link.top();
stack_for_link.pop();
new_head=current;
while(!stack_for_link.empty())
{
tmp=stack_for_link.top();
stack_for_link.pop();
cout<<tmp->val<<endl;
current->next=tmp;
current=tmp;
}
tmp->next=NULL;
return new_head; } Node * reverse_recursion_version(Node * head)
{
if(head->next==NULL)
{
return head;
}
Node *tmp,*new_head;
tmp=head->next;
new_head=reverse_recursion_version(tmp);
tmp->next=head;
head->next=NULL;
return new_head;
}
int main()
{
Node * head=NULL;
cout << "this is normal order" << endl;
head=creat_link();
show_display_link(head);
cout <<"this is reverse order"<<endl;
//head=reverse_iteration_version(head);
//head=reverse_iteration_version(head);
head=reverse_recursion_version(head);
show_display_link(head);
return 0;
}
递归,迭代,堆栈三种方式实现单链表反转(C++)的更多相关文章
- 递归迭代vector三种方法实现二路归并排序
https://mp.csdn.net/mdeditor/84933084# 附链接
- js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式
js replace 全局替换 js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换. <scrip ...
- Django中三种方式写form表单
除了在html中自己手写form表单外,django还可以通过 继承django.forms.Form 或django.forms.ModelForm两个类来自动生成form表单,下面依次利用三种方式 ...
- python 获取表单的三种方式
条件:urls.py文件中配置好url的访问路径.models.py文件中有Business表. 在views.py文件中实现的三种方式: from app01 improt models def b ...
- Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式
Linux就这个范儿 第15章 七种武器 linux 同步IO: sync.fsync与fdatasync Linux中的内存大页面huge page/large page David Cut ...
- Kubernetes 对象管理的三种方式
Kubernetes 中文文档 1. Kubernetes 对象管理的三种方式对比 Kubernetes 中的对象管理方式,根据对象配置信息的位置不同可以分为两大类: 命令式:对象的参数通过命令指定 ...
- 架构设计哲学【三种方式:支持DevOps的原则】
三种方式:支持DevOps的原则 2012年8月22日作者Gene Kim 45条评论 这篇文章是杨波老师分享的一篇文章:这几年对他架构影响最深的一篇文章.主要描述是关于DevOps的,但对系统架构同 ...
- 使用javascript实现在页面打印的效果的三种方式
<div id="console"></div> <script type="text/javascript"> var c ...
- 前端js,css文件合并三种方式,bat命令
前端js,css文件合并三种方式,bat命令 前端js文件该如何合并三个方式如下:1. 一个大文件,所有js合并成一个大文件,所有页面都引用它.2. 各个页面大文件,各自页面合并生成自己所需js的大文 ...
随机推荐
- QT,折腾的几天-----关于 QWebEngine的使用
几天前,不,应该是更早以前,就在寻找一种以HTML5+CSS+Javascript的方式来写桌面应用的解决方案,为什么呢?因为前端那套可以随心所欲的写样式界面啊,恩.其实我只是想使用H5的一些新增功能 ...
- (独孤九剑)---PHP操作MySQL数据库
[一]开启mysql扩展 在PHP操作MySQL数据库之前,要保证开启了MySQL数据库扩展 若未开启,则可以将php.int文件下的php_mysql开启即可,方式为去掉前面的封号; 配置完成后要重 ...
- 在添加新内容时,creatat没有数据
首先找到controller中的add方法,然后是执行了Service.insert()方法 然后找到service对应的impl方法, impl方法中的 public void insert(Cus ...
- (转)MySQL中的索引详讲
序言 之前写到MySQL对表的增删改查(查询最为重要)后,就感觉MySQL就差不多学完了,没有想继续学下去的心态了,原因可能是由于别人的影响,觉得对于MySQL来说,知道了一些复杂的查询,就够了,但是 ...
- spring 中属性scope 的prototype(有状态)和singleton(无状态)
默认情况下,从bean工厂所取得的实例为Singleton(bean的singleton属性) Singleton: Spring容器只存在一个共享的bean实例, 默认的配置. Prototype: ...
- swift 集成使用最新版百度地图_v2.10.2(一)
目前在开发中使用百度地图的APP越来越多了,我在网上找的集成百度地图的例子不是很多,于是我就将我集成百度地图的过程记录了下来: 一.前提:安装CocoaPods sudo gem install co ...
- 散列--P1047 校门外的树
题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,-,L,都种有 ...
- TestNG异常测试
用@Test(expectedExceptions = xxx) 声明 package com.janson; import org.testng.annotations.Test; public c ...
- 【Codeforces 242C】King's Path
[链接] 我是链接,点我呀:) [题意] 让你找到(x0,y0)到(x1,y1)的一条最短路 走过的点必须在所给的n个横向路径上 [题解] 因为n条横向路径上的点最多不会超过10的5次方个,所以我们可 ...
- [BZOJ2120] 数颜色 && [bzoj2453] 维护队列(莫队 || 分块)
传送门 只有第一个,第二个权限题. 分块,然而wa,没看出来错在哪里,有时间再看. #include <cmath> #include <cstdio> #include &l ...