设计一算法,将已建立的单链表进行逆置

2023-11-02

     单链表逆序有很多种方法,可是好多种方法都是逆序后就不能再使用之前定义的函数了,因为你的头结点变动了,不再是之前所定义的first或是head了,所以之前的方法都要重写,后来我终于想到了种很好的方法了。

    为了不重开空间,我们可以就在原来的那个单链表上做。如下图:

依次这样下去,直到p=NULL时,再把头指针赋值给prev即可。

也就是说我们循环的条件是while(p!=NULL)。即:

void LinkList<DataType>::Rever()
{
Node<int> *prev = NULL;//定义空指针
Node<int> *next;//定义P指针的下一个指针
Node<int> *p = first->next;//保留头指针
while(p!=NULL)
{
next = p->next;
p->next = prev;
        prev = p;
p = next;
}
first->next = prev;

}

此为逆序函数。

完整的示例代码如下:

#include<iostream.h>
template<class DataType>
class Node{ 
  public:     
 DataType data;  
 Node<DataType> *next;
};


template<class DataType>
class LinkList
{
public:
LinkList(DataType a[],int n);
DataType Get(int i);
int Locate(DataType x);
void Insert(int i,DataType x);
DataType Delete(int i);
int Length();
void PrintList();
void Rever();
private:
Node<DataType> *first;

};
//有参构造
template<class DataType>
LinkList<DataType>::LinkList(DataType a[],int n)
{
first = new Node<int>;first->next=NULL;
for(int i=0;i<n;i++)
{
Node<int> *s=new Node<int>;s->data=a[i];
s->next=first->next;first->next=s;
}
}
//遍历功能
template<class DataType>
void LinkList<DataType>::PrintList()
{
Node<int> *p = first->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
if(p==NULL)
{cout<<endl;}
}
//插入功能
template<class DataType>
void LinkList<DataType>::Insert(int i,DataType x)
{
Node<int> *p=first; 
int count=0;
while(p!=NULL&&count<i-1)
{
p=p->next;
count++;
}
if(p==NULL)throw"位置";
else{
Node<int> *s=new Node<int>;s->data=x;
s->next=p->next;p->next=s;
}
}
//删除功能
template<class DataType>
DataType LinkList<DataType>::Delete(int i)
{
Node<int> *p=first;
Node<int> *q;
int count=0;
while(p!=NULL&&count<i-1)
{
p=p->next;
count++;
}
if(p==NULL||p->next==NULL)
throw"位置";
else{
q=p->next;
int x=q->data;
p->next=q->next;
delete q;
return x;
}
}
//按位查找
template<class DataType>
DataType LinkList<DataType>::Get(int i)
{
Node<int> *p=first->next;
int count=1;
while(p!=NULL&&count<i)
{
p=p->next;
count++;
}
if(p==NULL)throw"位置";
else return p->data;
}
//长度
template<class DataType>
int LinkList<DataType>::Length()
{
Node<int> *p=first->next;
int count = 0;
while(p!=NULL)
{
p = p->next;
count++;
}
return count;
}


//逆值
template<class DataType>
void LinkList<DataType>::Rever()
{
Node<int> *prev = NULL;
Node<int> *next;
Node<int> *p = first->next;
while(p!=NULL)
{
next = p->next;
p->next = prev;
   prev = p;
p = next;
}
first->next = prev;

}


void main()
{
int a[10] = {0,1,2,3,4,5,6,7,8,9};
int n = 10;
LinkList<int> list(a,n);
cout<<list.Length()<<endl;
list.PrintList();
//插入
list.Insert(3,4);
list.PrintList();
//删除
list.Delete(3);
list.PrintList();
//查找
cout<<list.Get(3)<<endl;
//逆序
list.Rever();
list.PrintList();
}

 

 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计一算法,将已建立的单链表进行逆置 的相关文章

  • 哪些工具可以实现在线ps的需求

    在线Photoshop有哪些工具可以选择 在 Adobe 的官网上就能够实现 很惊讶吧 其实 Adobe 官方推出了在线版本的 Photoshop 的 尽管目前还是 Beta版本 但其实也开放了蛮久了 编辑切换为居中 添加图片注释 不超过
  • 单链表的各种操作,对于初学者来说,更容易理解

    include
  • figma有哪些快速入门的好用技巧

    使用Figma在创建设计系统或处理大型设计项目时 总会涉及批量修改 快速定位 自动布局问题 MarcAndrew这篇文章分享了技巧 可以大大提高设计效率 希望对大家有所帮助 在这篇文章中 我列出了一些快速简单的方法来帮助你更快地使用它Fig
  • 探究:kafka生产者/消费者与多线程安全

    目录 1 多线程安全 1 1 生产者是多线程安全的么 1 1 消费者是多线程安全的么 2 消费者规避多线程安全方案 2 1 每个线程维护一个kafkaConsumer 2 2 单 多 kafkaConsumer实例 多worker线程 2
  • 设计模式C++学习笔记之一(Strategy策略模式)

    http www cnblogs com wanggary archive 2011 04 07 2008796 html 无意中 从网上下到一本电子书 24种设计模式介绍与6大设计原则 很好奇这里有24种设计模式 印象中GOF写的 设计模
  • 面向对象设计的SOLID原则

    S O L I D是面向对象设计和编程 OOD OOP 中几个重要编码原则 Programming Priciple 的首字母缩写 SRP The Single Responsibility Principle 单一责任原则 OCP The
  • 合并两个有序单链表(Java)

    思想 准备两个链表l1和l2 判断是否有链表为空 如果l1为空 则不用比较直接返回l2 如果l1为空 则直接返回l2 比较l1和l2节点 选出最小的那个节点 将该节点设为合并后的链表的head 头 节点 同时将指向该节点的l1或l2后移 方
  • 【Figma技巧】Figma中快速制作斜线阴影的三种方法

    想要实现的效果 方法一 安装Hero Patterns插件 安装地址 https www figma com community plugin 743134103711120154 Hero Patterns for Figma 缺点 生成
  • sketch基础教程大全,对象、图层、画板常见技巧

    sketch对象 图层 画板的使用技巧 1 通过快捷键调整图形的形状 选择图形 按住Command按键 然后通过上 下 左 右方向键按1像素调整图形形状 同时按住按钮 CommandShift方向键 可调整方向键 2 复制元素 选择一个元素
  • 基于单链表实现一元n次多项式的创建、输出和求和操作

    在主函数中调用函数CreatePolyn 函数创建两个多项式 2 3X 5X3 2X4 3 2X 4X2 然后调用函数AddPolyn求它们的和 最后打印出求和后的结果 提示 多项式数据结构定义 typedef struct pnode f
  • 数据结构——>单向环形链表

    单向环形链表 一 单向环形链表应用场景 二 单向环形链表介绍 三 单向环形链表代码实现 1 代码实现思路 2 代码实现 一 单向环形链表应用场景 提起单向环形链表 就不得不说约瑟夫问题 约瑟夫环 什么事约瑟夫问题呢 1 约瑟夫问题 有时也称
  • PTA Basic level 1025 反转链表 (25分)

    1025 反转链表 25分 给定一个常数 K 以及一个单链表 L 请编写程序将 L 中每 K 个结点反转 例如 给定 L 为 1 2 3 4 5 6 K 为 3 则输出应该为 3 2 1 6 5 4 如果 K 为 4 则输出应该为 4 3
  • 学习笔记(5):MySQL数据库从入门到实战应用-数据完整性

    立即学习 https edu csdn net course play 27328 362521 utm source blogtoedu 实体完整性 要求每张表都有唯一标识符 每张表主键字段不为空且不能重复 唯一性约束 主键约束 标识列
  • “自顶向下,逐步求精”的方法

    1 什么叫做 自顶向下 逐步求精 目前软件开发方法使用最广泛的 当属结构化的方法和面向对象的方法 而其中 结构化程序设计支持 自顶向下 逐步求精 的程序设计方法 自顶向下 的具体内涵是将复杂 大的问题划分为小问题 找出问题的关键 重点所在
  • 【数电】如何使用74LS112(或74LS74)构成一个十四分频器(模七计数器)

    IT精英们 大家都学过数字电子技术吧 尽管这东西没用 不过这些基础课程对思维的培养还是很有好处的 我不爱上课 但不代表我不喜欢数电 我们实验课老师为了加强实验难度 把实验题改掉了 用74LS112 或者74LS74 设计一个十四分频器 原来
  • 剑指Offer - 面试题22:链表中倒数第K个节点

    题目 输入一个链表 输出该链表中倒数第K个节点 为了和服大多数人习惯 本题从1开始计数 即链表的尾节点是倒数第1个节点 例如 一个链表有6个节点 从头节点开始 它们的值依次是1 2 3 4 5 6 这个链表的倒数第3个节点是值为4的节点 链
  • 有特别有创意的网站设计案例

    有人说 UI 设计师集艺术性与科学性于一身 不仅需要对工具的使用熟练 更需要对美术艺术有一定的基础了解 如果想要成为优秀的 UI 设计师是一个需要磨砺的过程 需要不断的学习和积累 多看多练多感受 其中对于优质的设计案例的收集和练习是重要的
  • 数据结构第六章——图

    数据结构第六章 图 图的定义和术语 G V E V 顶点 数据元素的 有穷非空集合 E 边的有穷集合 无向图 每条边都是无方向的 有向图 每条边都是有方向的 完全图 任意两个顶点都有一条边两连 无向完全图 n个顶点 n n 1 2条边 有向
  • JAVA实现二叉树的前、中、后序遍历(递归与非递归)

    最近在面试中遇到过问到二叉树后序遍历非递归实现的方法 之前以为会递归的解决就OK 看来还是太心存侥幸 在下一次面试之前 特地整理一下这个问题 首先二叉树的结构定义 java代码如下 public class Node private int
  • Photoshop、Illustrator、Sketch哪个更好

    以前在交流组经常能看到大家争论哪个设计软件好 到底是你的吗 Illustrator好还是我的CorelDRAW或者他的Photoshop强大 但是跟着UI流行的设计 Sketch软件也加入了争论 让我们和你分享一下这篇文章 让我们来看看平面

随机推荐

  • Dcat-admin 重写底部版权内容

    Dcat admin 重写底部版权内容 背景 使用 deploy 自动发布项目 无法直观知道发布成功与否 想到可在版权代码位置 添加更新时间来解决该问题 原理 已知 Dcat admin 加载布局文件时候 优先加载 resources vi
  • spring aop @Pointcut语法详解

    转载 https blog csdn net qq 26860451 article details 100554377
  • 各种UI库使用总结

    各种UI库使用总结 工作了这么年 使用了一些UI库 简单的总结一下 UI库也是五花八门 根据自己的产品 应用场景吧 没有绝对合适的 各有各的应用场景吧 QT 这几年前后在一些嵌入式上使用过QT来做为开发 有带UI及不带UI界面的 版本的基本
  • 基于51单片机的羽毛球计分器(含Keil程序和Proteus文件)

    系统概述 系统使用的模块有AT89C51单片机 LCD1602显示屏 矩阵键盘 蜂鸣器 整个羽毛器计分器内的比赛双方的比赛分数和比赛时间和节数等都会在LCD1602显示屏上进行显示 通过左侧的按键可以增加双方的分数 还可以控制比赛的开始和暂
  • 寻找最大整数——从键盘输入四个整数,找出其中的最大值并将其输出

    问题描述 从键盘输入四个整数 找出其中的最大值并将其输出 输入说明 输入4个整数 用空格分隔 输出说明 输出值最大的一个整数 输入样例 25 99 46 0 输出样例 99 include
  • 编程实现朴素贝叶斯分类算法

    from sklearn datasets import load iris iris load iris from sklearn naive bayes import GaussianNB 高斯分布型 gnb GaussianNB 构造
  • Chapter4 Duality theory对偶理论--Introduction to linear optimization

    组会讲稿 传到这里分享下
  • 未名湖边的烦恼 蓝桥杯

    问题描述 每年冬天 北大未名湖上都是滑冰的好地方 北大体育组准备了许多冰鞋 可是人太多了 每天下午收工后 常常一双冰鞋都不剩 每天早上 租鞋窗口都会排起长龙 假设有还鞋的m个 有需要租鞋的n个 现在的问题是 这些人有多少种排法 可以避免出现
  • 前端配置跨域代理

    跨域时对于前后端开发中一个非常常见的问题 当我们客户端向我们的服务器请求接口数据的时候 我们可以请求到服务器当中的数据 但是我们把数据返回我们的客户端的时候就会产生跨域问题 所以 跨域是针对我们浏览器设置一个安全策略 就是当我们的协议 域名
  • Handler processing failed; nested exception is java.lang.NoClassDefFoundError

    在使用阿里云发送短信接口时出现此错误 原因是springmvcjar包和阿里云jar包出现冲突 建议使用下面两个版本
  • 【工具】VirtualBox虚拟机安装Windows操作系统

    前面的文章中介绍了VirtualBox虚拟机的安装 VirtualBox虚拟机中如何安装操作系统 是本文的重点 下面将进行详细介绍 使用VirtualBox虚拟机安装Windows操作系统有很多好处 主要包括以下几点 节省资源 通过虚拟化技
  • Spring Boot将声明日志步骤抽离出来做一个复用类

    上文Spring Boot日志基础使用 设置日志级别中我们写了个比较基本的日志操作 但也随之产生了一个问题 我们这行代码 能不能不写 具体说 我们不希望每个需要日志的类都声明一个在这 看着太不美观了 我们最简单方法当然是继承 我们找个目录创
  • 论python自动化测试(3)- 自动化框架及工具

    python自动化测试 3 自动化框架及工具 1 概述 手续的关于测试的方法论 都是建立在之前的文章里面提到的观点 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 后面所谈到的 测试自动化 也将围绕着 接口自动化 来介绍
  • Linux Common Comment in Practices

    Linux中的命令的确是非常多 但是我们只需要掌握我们最常用的命令就可以了 当然你也可以在使用时去找一下man 他会帮你解决不少的问题 然而每个人玩Linux的目的都不同 所以他们常用的命令也就差异非常大 因为不想在使用是总是东查西找 所以
  • 网络安全等级保护合规一览

    公众号关注 WeiyiGeek 将我设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 0x00 前言 0x01 等保2 0基本要求 0x02 等保定级 1 定级流程 2 定级比较 3 定级通用要求 0x03 合规流程 0
  • 自动化平台搭建之定制log系统

    log系统概述 我们搭建的自动化平台 无论是Web和Android 都少不了一个重要的模块 那就是log输出模块 该模块记录了整个自动化平台运行期间的日志记录 完成自动化测试后 我们可以通过日志追踪和分析fail项 根据自动化平台log输出
  • Intellj IDEA基础设置

    基础配置 view toolbar 配置jdk configure project defaults project structure new jdk 路径 添加插件 configure plugins 配置jvm内存 configure
  • Bootstrap的CSS类积累学习

    要看哪个的介绍 搜索关键词就行了 001 container 这是Bootstrap中定义的一个CSS类 它用于创建一个具有固定宽度的容器 比如 container类将 div 元素包装成一个固定宽度的容器 详情见 https blog c
  • STL vector的N种构造方式

    1 使用默认无参的构造函数进行构造 vector
  • 设计一算法,将已建立的单链表进行逆置

    单链表逆序有很多种方法 可是好多种方法都是逆序后就不能再使用之前定义的函数了 因为你的头结点变动了 不再是之前所定义的first或是head了 所以之前的方法都要重写 后来我终于想到了种很好的方法了 为了不重开空间 我们可以就在原来的那个单