C++将链表反转的实现
有题目的需求是求将链表反转,例如1->2->3->4->5转变成5->4->3->2->1,经典的是可以有两种解决方法,递归方式和非递归方式,下面给出C++的这两周实现过程。
#include<iostream>
using namespace std;
const int N = 6;
typedef int DataType;//定义数据类型 typedef struct node{//创建链表node
DataType data;
struct node* next;
}LinkedNode,*LinkList; LinkList CreateList(DataType a[N])//建表函数
{
LinkedNode* ListHead = new LinkedNode();
ListHead->data= a[0];
ListHead->next= NULL;
for(int i = N - 1;i >= 1;i --)
{
LinkedNode* p = new LinkedNode();
p->data = a[i];
p->next = ListHead->next;
ListHead->next = p;
}
return ListHead;
} void PrintList(LinkList ListHead)//实现的一个输出表的函数
{
if(ListHead == NULL)
cout<<"This is empty list"<<endl;
else
{
LinkedNode* p = ListHead;
while(p != NULL)
{
cout<<p->data<<" ";
p = p->next;
}
cout<<endl;
}
}
void RecReverseList(LinkedNode* pCur,LinkList& ListHead)//递归实现表的反转
{
if( (NULL == pCur) || (NULL == pCur->next) )
{
ListHead = pCur;
}
else
{
LinkedNode* pNext = pCur->next;
RecReverseList(pNext,ListHead);
pNext->next = pCur;
pCur->next= NULL;
}
}
void UnRecReverseList(LinkList& ListHead)//非递归实现表的反转
{
if(NULL == ListHead)
return ;
LinkedNode *pre,*cur,*nex;
pre = ListHead;
cur = pre->next;
while(cur)
{
nex = cur->next;
cur->next = pre;
pre = cur;
cur = nex;
}
ListHead->next= NULL;
ListHead = pre; }
int main()
{
int a[N] = {1,2,3,4,5,6};
LinkedNode* list = CreateList(a);
PrintList(list);
LinkedNode* pTemp = list;
RecReverseList(pTemp,list);
PrintList(list);
UnRecReverseList(list);
PrintList(list);
return 0;
}
运行结果:
C++将链表反转的实现的更多相关文章
- 链表反转leetcode206
最近准备结束自己的科研生涯,准备要开始找工作了,准备在LEETCODE刷刷题...刷的前40题全部用python刷的,各种调包速度奇快,后被师哥告知这样没意义,于是准备开始回归C++,Python用的 ...
- 链表反转 (Multi-method)
链表反转是链表相关问题最基础的知识,做完LeetCode中LinkedList后才会有这种体会,因为ACM算法中不会涉及这一部分.解决这一问题有多种方法,在面试中面试官通常也会要求写出多种.包括sta ...
- java实现单链表反转
一.简介 经查阅,主要有两种方法实现链表反转,递归反转法和遍历反转法: 递归: 在反转当前结点之前先反转其后边的结点,即.从尾结点开始逆向反转各个节点的指针域指向: 遍历:从前往后反转各个结点的指针域 ...
- C++ 单向链表反转
单向链表反转,一道常见的面试题,动手实现下. #include "stdafx.h" #include <stdlib.h> struct Node{ int data ...
- c语言:链表排序, 链表反转
下面将实现链表排序的排序和遍历显示功能: 所定义的链表结构如下: head -> p1 -> p2 ->p3 ->....->pn; head的本身不作为数据节点,hea ...
- 【Java数据结构】Java数据结构之链表反转
我们都知道用C可以很简单的实现单链表反转,今天来学习下,在Java中如何实现链表反转. 思路很简单,定义一个类,这个类分成2块,一块是表示自身的标志,另外一个存储指向下一个元素的引用.通过互换相邻两个 ...
- [LeetCode] 链表反转相关题目
暂时接触到LeetCode上与链表反转相关的题目一共有3道,在这篇博文里面总结一下.首先要讲一下我一开始思考的误区:链表的反转,不是改变节点的位置,而是改变每一个节点next指针的指向. 下面直接看看 ...
- 单链表反转(Singly Linked Lists in Java)
单链表反转(Singly Linked Lists in Java) 博客分类: 数据结构及算法 package dsa.linkedlist; public class Node<E> ...
- 【easy】206. Reverse Linked List 链表反转
链表反转,一发成功~ /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; ...
- java实现单链表反转(倒置)
据说单链表反转问题面试中经常问,而链表这个东西相对于数组的确稍微难想象,因此今天纪录一下单链表反转的代码. 1,先定义一个节点类. 1 public class Node { 2 int index; ...
随机推荐
- 【c++ primer, 5e】类的其他特性(卒)
1 - Class Members Revisited 2 - Functions That Return *this 3 - Class Types 4 - Friendship Revisited ...
- clipbrd剪切板查看器
本文,我们来学习一下简单的概念,即,如何查看系统剪贴版里面有什么内容? 如果要想看.或者验证系统剪贴版里面都有什么内容,最为简单的方法就是通过"粘贴"的操作来验证! 但是, ...
- PHP 错误日志/安全配置
PHP 常用配置 /php/bin/php -i | head Loaded Configuration File => /php/etc/php.ini 查看php配置目录 vim /usr/ ...
- [BZOJ2017][Usaco2009 Nov]硬币游戏
Description 农夫约翰的奶牛喜欢玩硬币游戏,因此他发明了一种称为“Xoinc”的两人硬币游戏. 初始时,一个有N(5 <= N <= 2,000)枚硬币的堆栈放在地上,从堆顶数起 ...
- 查看linuxCPU信息
linux 下查看机器是cpu是几核的 几个cpu more /proc/cpuinfo |grep "physical id"|uniq|wc -l 每个cpu是几核(假设cpu ...
- mysql DATE_FORMAT 年月日时分秒格式化
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')
- AtCoder Regular Contest 096
AtCoder Regular Contest 096 C - Many Medians 题意: 有A,B两种匹萨和三种购买方案,买一个A,买一个B,买半个A和半个B,花费分别为a,b,c. 求买X个 ...
- MYSQL 多实例运行
1.创建数据文件 mkdir /var/lib/mysql_3307 mysql_install_db --datadir=/var/lib/mysql_3307 --user=mysql 2.给数据 ...
- [转]类不平衡问题与SMOTE过采样算法
在前段时间做本科毕业设计的时候,遇到了各个类别的样本量分布不均的问题——某些类别的样本数量极多,而有些类别的样本数量极少,也就是所谓的类不平衡(class-imbalance)问题. 本篇简述了以下内 ...
- css文本(教程)
1.text-transform --文本转换 定义文本的大小写状态,此属性对中文无意义 取值:capitalize | uppercase | lowercase | none | inherit ...