数据结构 - 反转单链表(C++)
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
// 反转单链表的循环算法(C++)#include <iostream>#define NULL 0using namespace std;struct Node{ char data; Node* next;};Node* create(){ Node* head = NULL; Node* rear = head; Node* p; // The pointer points to new created node. char tmp; do { cout << "Please input positive integer or #:"; cin >> tmp; if(tmp != -1) { p = new Node; p->data = tmp; p->next = NULL; if(head == NULL) { head = p; } else { rear->next = p; } rear = p; } } while(tmp != '#'); return head;}void print(Node* head){ cout << "The current list is: "; Node* p = head; if(head != NULL) { do { cout << p->data << cout << ' '; p = p->next; } while(p != NULL); } cout << "\r\n";}void reverse(Node*& head) // Use & here since the function body changed the head pointer.{ if(head == NULL) { return; } Node*pre, *cur, *ne; pre = head; cur = head->next; while(cur) { ne = cur->next; // Store next pointer. cur->next = pre; // Reverse the current code pointer. pre = cur; cur = ne; } head->next = NULL; head = pre;}int main(){ Node* list = create(); print(list); reverse(list); print(list); return 0;}// Output:/*Please input positive integer or #:1Please input positive integer or #:5Please input positive integer or #:8Please input positive integer or #:3Please input positive integer or #:2Please input positive integer or #:7Please input positive integer or #:9Please input positive integer or #:fPlease input positive integer or #:gPlease input positive integer or #:tPlease input positive integer or #:YPlease input positive integer or #:BPlease input positive integer or #:#The current list is: 10FC0C3E8 50FC0C3E8 80FC0C3E8 30FC0C3E8 20FC0C3E8 70FC0C3E8 90FC0C3E8 f0FC0C3E8 g0FC0C3E8 t0FC0C3E8 Y0FC0C3E8 B0FC0C3E8 #0FC0C3E8The current list is: #0FC0C3E8 B0FC0C3E8 Y0FC0C3E8 t0FC0C3E8 g0FC0C3E8 f0FC0C3E8 90FC0C3E8 70FC0C3E8 20FC0C3E8 30FC0C3E8 80FC0C3E8 50FC0C3E8 10FC0C3E8*/
// 反转单链表的递归算法(C++)#include <iostream>#define NULL 0using namespace std;struct Node{ char data; Node* next;};Node* create(){ Node* head = NULL; Node* rear = head; Node* p; // The pointer points to the new created node. char tmp; do { cout << "Please input integer or char '#':"; cin >> tmp; if(tmp != '#') { p = new Node; p->data = tmp; p->next = NULL; if(head == NULL) { head = p; } else { rear->next = p; } rear = p; } } while(tmp != '#'); return head;}void print(Node* head){ cout << "The current list is: "; Node* p = head; if(head != NULL) { do { cout << p->data << cout << ' '; p = p->next; } while(p != NULL); } cout << "\r\n";}Node* reverseSingleLinkedListRecursive(Node* p, Node*& head){ if(p == NULL || p->next == NULL) { head = p; return p; } Node* tmp = reverseSingleLinkedListRecursive(p->next, head); tmp->next = p; p->next = NULL; // To prevent forming a ring. return p;}int main(){ Node* list = create(); print(list); reverseSingleLinkedListRecursive(list, list); print(list); return 0;}// Output:/*Please input integer or char '#':1Please input integer or char '#':2Please input integer or char '#':4Please input integer or char '#':6Please input integer or char '#':3Please input integer or char '#':8Please input integer or char '#':7Please input integer or char '#':9Please input integer or char '#':0Please input integer or char '#':#The current list is: 10F69C3E8 20F69C3E8 40F69C3E8 60F69C3E8 30F69C3E8 80F69C3E8 70F69C3E8 90F69C3E8 00F69C3E8The current list is: 00F69C3E8 90F69C3E8 70F69C3E8 80F69C3E8 30F69C3E8 60F69C3E8 40F69C3E8 20F69C3E8 10F69C3E8*/
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
数据结构 - 反转单链表(C++)相关推荐
- java 链表反转_剑指BAT:如何最优雅着反转单链表?
前言 以专题的形式更新刷题贴,欢迎跟我一起学习刷题,相信我,你的坚持,绝对会有意想不到的收获.每道题会提供简单的解答,如果你有更优雅的做法,欢迎提供指点,谢谢 [题目描述] 反转单链表.例如链表为: ...
- python怎么反转单链表_单链表反转python实现代码示例
单链表的反转可以使用循环,也可以使用递归的方式 1.循环反转单链表 循环的方法中,使用pre指向前一个结点,cur指向当前结点,每次把cur->next指向pre即可. 代码: class Li ...
- 浅谈:数据结构之单链表,java代码演示单链表
单链表 本文是观看尚硅谷韩老师视频学习总结,部分来源网络. 单链表介绍 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每 ...
- Θ(n)反转单链表(算法导论第三版第十章10.2-7)
Θ(n)反转单链表 (算法导论第三版第十章10.2-7) template<typename T> void reverses(Single_L<T> &l) {if( ...
- 数据结构:单链表中在P结点前插入S结点
标题:数据结构:单链表中在P结点前插入S结点 在数据结构的习题中偶然看到了一个题目 已知在单链表中P不是首元结点也不是尾元结点,在P结点前插入S结点 #include<stdio.h> # ...
- lcg_magic算法笔记:反转单链表
文章目录 1. 题目 2. 无头结点的单链表 2.1. 原始单链表 2.2. 反转过程 2.3. 代码 2.4. 结果 2.5. Github 3. 带头结点的单链表 3.1. 初始单链表 3.2. ...
- 基本的数据结构:单链表(Singly Linked List)
一.基本的数据结构:单链表(Singly Linked List) 什么是单链表? 下面是百度百科给出的官方解释: 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表 ...
- 链表相关操作:创建链表、遍历链表、求链表长度、链表中删除一个节点、链表中插入一个节点、反转单链表...
1 #include<iostream> 2 #include<stdlib.h> 3 4 typedef struct node 5 { 6 int data; 7 stru ...
- 数据结构之单链表超详细
目录 单链表介绍和内存布局 单链表的应用实例 单链表的创建和和遍历分析 单链表的创建和和遍历代码 单链表按顺序插入节点 代码实现 单链表结点的修改 删除结点 经典面试题 求单链表的结点个数 查找单链表 ...
最新文章
- 搭建 Hadoop 伪分布式环境
- oracle查询表占用空,查询dba_tables 为啥有的表的表空间为空
- 疯狂python讲义视频 百度云-疯狂Python讲义 PDF高清版附源码
- 构建创业公司突击小团队
- .NET 编码的基础知识
- 链表之删除单链表倒数第K个节点
- 我们需要打造有意识的人工智能吗?
- STM32之窗口看门狗例程
- 电子计算机解锁,全电子计算机联锁系统信号解锁模块的研究
- 【操作系统】进程的异步性
- 半监督学习(semi-supervised learning)
- blender php,Blender 源码学习 --- Modifier
- 施一公:无论什么学科,最不重要的就是智商
- POJ3345 Bribing FIPA(树形DP)
- 基于FPGA的交通灯——香樟路
- Android 6种加载网络图片的第三方详解
- html将字符串按逗号分隔,js如何截取以逗号隔开的字符串
- 不想学习的小颓靡怎么解决
- 梁权财到徐闻生态工业集聚区调研
- java 生成纯色图片_java实现切图并且判断图片是不是纯色/彩色图片
热门文章
- jQuery中attr和prop方法的区别
- INFO ipc.Client:Retrying connect to server 9000
- xenapp 发布到外网更改公网IP。
- 通过IIS操作修改服务器文件没有权限的解决办法
- 说说如何搭建 Nginx 反向代理 Tomcat
- JAVA之旅(八)——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例...
- python爬虫人门(10)Scrapy框架之Downloader Middlewares
- 编译安装LNMP Centos 6.5 x64(6.6 x64) + Nginx1.6.0 + PHP5.5.13 + Mysql5.6.19
- 第一次作业:阅读优秀博文谈感想
- 《JavaScript应用程序设计》一一2.8 闭包