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

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(使用前将#替换为@)

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

  • 浅谈依赖注入

    最近几天在看一本名为Dependency Injection in NET 的书 主要讲了什么是依赖注入 使用依赖注入的优点 以及 NET平台上依赖注入的各种框架和用法 在这本书的开头 讲述了软件工程中的一个重要的理念就是关注分离 Sepa
  • 【设计】】MOS管衬底电位接法

    参考 请问什么是nwell和P substrate 请问什么是nwell和P substrate 请问什么是nwell和P substrate 在CMOS的IC设计 如NPN三极管中经常看到请问什么是nwell和P substrate的说法
  • 探究:秒杀系统

    1 秒杀系统的特点 瞬时高并发 2 预防措施 2 1 流量限制 对于一个相同的用户 限制请求的频次 对于一个相同的IP 限制请求的频次 验证码 减缓用户请求的次数 活动开启之前 按钮先置灰 防止无效的请求流入系统 给系统造成冲击 2 2 页
  • 面向对象设计的SOLID原则

    S O L I D是面向对象设计和编程 OOD OOP 中几个重要编码原则 Programming Priciple 的首字母缩写 SRP The Single Responsibility Principle 单一责任原则 OCP The
  • C++二叉树遍历总结\100. Same Tree

    理论学习 概念介绍 遍历图解 遍历算法 代码实践 实现模板 Same Tree 题目描述 代码实现 转载请注明出处 http blog csdn net c602273091 article details 55195284 理论学习 概念
  • 【Figma技巧】Figma中快速制作斜线阴影的三种方法

    想要实现的效果 方法一 安装Hero Patterns插件 安装地址 https www figma com community plugin 743134103711120154 Hero Patterns for Figma 缺点 生成
  • 基于单链表实现一元n次多项式的创建、输出和求和操作

    在主函数中调用函数CreatePolyn 函数创建两个多项式 2 3X 5X3 2X4 3 2X 4X2 然后调用函数AddPolyn求它们的和 最后打印出求和后的结果 提示 多项式数据结构定义 typedef struct pnode f
  • 学习笔记(5):MySQL数据库从入门到实战应用-数据完整性

    立即学习 https edu csdn net course play 27328 362521 utm source blogtoedu 实体完整性 要求每张表都有唯一标识符 每张表主键字段不为空且不能重复 唯一性约束 主键约束 标识列
  • 闲谈开闭原则——基于UI动画框架

    本文继续聊另外一个设计原则 开闭原则 在UI动画框架中 开闭原则在 动画策略 和 移动算法 这两个类体系中均有所体现 照旧 先看一下开闭原则的定义 1 开闭原则 一个软件实体如类 模块和函数应该对扩展开放 对修改关闭 有人说过 唯一不变的就
  • 为什么MVC不是一种设计模式

    比较Backbone和Ext4 x在MVC实现上的差异 大漠穷秋 前言 圣人云 不想做妈咪的小姐不是好码农 每一个码农的心中都有一个终极理想 那就是有一天不用再Coding 在成为妈咪的道路上 设计模式 被认为是一项必备的技能 因此 经常有
  • 算法精解_C语言 链表_单链表(接口定义+类型实现)

    链表可以说是一种最为基础的数据结构 链表由一组元素以一种特定的顺序组合或链接而成 在维护数据的集合时很有用 这一点同我们常用的数组很相似 然而 链表在很多情况下比数组更有优势 特别是在执行插入和删除操作时链表拥有更高的效率 链表需要动态的开
  • 剑指Offer - 面试题22:链表中倒数第K个节点

    题目 输入一个链表 输出该链表中倒数第K个节点 为了和服大多数人习惯 本题从1开始计数 即链表的尾节点是倒数第1个节点 例如 一个链表有6个节点 从头节点开始 它们的值依次是1 2 3 4 5 6 这个链表的倒数第3个节点是值为4的节点 链
  • 线性表技巧之Note001-链表的最后一个节点

    找到单链表的尾节点 通常我们遍历单链表的代码如下 list 指向单链表的头节点 因此 list gt next 指向链表的第一个节点 LNode node list gt next while node NULL node node gt
  • 【java实现二叉树的各种遍历方式】

    二叉树的各种遍历方式 通过递归方式 可实现二叉树的层级遍历 先序 中序 后序等遍历方式 package com ykq import java util ArrayList import java util List author ykq
  • 动态菜单/权限管理的实现

    权限管理 序 现在基本上大大小小的系统都由权限分配这一基础功能 不同的用户看到的界面不一样 能够使用的功能也不会尽然相同 所以我要让我的系统做到超级管理员可以看到 操作所有界面 而新闻管理员只能看到新闻管理模块 仓库管理员只能看到仓库管理模
  • 数据结构第六章——图

    数据结构第六章 图 图的定义和术语 G V E V 顶点 数据元素的 有穷非空集合 E 边的有穷集合 无向图 每条边都是无方向的 有向图 每条边都是有方向的 完全图 任意两个顶点都有一条边两连 无向完全图 n个顶点 n n 1 2条边 有向
  • 设计模式C++学习笔记之二(Proxy代理模式)

    http www cnblogs com wanggary archive 2011 04 08 2009965 html 代理 一看名字就知道这只是个中介而已 真实的执行者在代理的后面呢 cbf4life在他的书里提的例子也很有趣 更详细
  • 两个无序单链合并成一个有序单链表

    解题思路 两个无序链表先转换成两个有序单链表 两个有序单链表合并成一个有序单链表 代码 import java util 链表 class Node int val Node next public Node int val this va
  • 试题库管理系统--数据库设计

    链接 https pan baidu com s 1ilMGCA n1GPDk3O8k7w7Gg 提取码 m0ke 复制这段内容后打开百度网盘手机App 操作更方便哦 一 概要设计 1 1 背景和意义 目前 许多高校绝大多数课程还采用考教统
  • JAVA实现二叉树的前、中、后序遍历(递归与非递归)

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

随机推荐

  • 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了 所以之前的方法都要重写 后来我终于想到了种很好的方法了 为了不重开空间 我们可以就在原来的那个单