输出该单链表的中间结点的值,如果链表长度为偶数,则输出中间靠右的结点

2023-10-26

输出该单链表的中间结点的值,如果链表长度为偶数,则输出中间靠右的结点

题目要求:
输入数据创建一个单链表,实现一种算法。输出该单链表的中间结点的值,如果链表长度为偶数,则输出「中间靠右」的结点。如果链表只有一个元素,则输出唯一的元素。

算法思路:

  1. 创建一个单链表
  2. 设置两个指针,一个快指针fast,一个慢指针slow;
  3. 当快指针所指向的数据以及它所指向的下一个数据为空时,慢指针指向中间元素。
#include <iostream>
#define LIST_INIT_SIZE 100
#define Elemtype int
#define NULL 0

typedef struct LNode
{
    Elemtype data;
    struct LNode* next;
}LNode, * LinkList;

//创建一个单链表
LNode* CreatLinklist(void) {
    LinkList head = (LNode*)malloc(sizeof(LNode));//定义头结点
    head->data = 0;//初始化头结点,因为head->data指的是int,所以需要赋值一个具体的int
    head->next = NULL;//头结点指向NULL

    LNode* p = head;
    printf("请输入链表的长度:");
    int n;
    scanf_s("%d", &n);

    printf("请输入链表:\n");
    for (int i = 0; i < n; i++) {
        LNode* cur = (LNode*)malloc(sizeof(LNode));//声明一个新结点
        int val;
        scanf_s("%d", &val);
        cur->data = val; // 输入的val值要赋值给cur
        cur->next = NULL;
        p->next = cur;
        p = p->next;
    }
    return head;//创建完链表之后需要返回单链表的头部
}

//求链表的长度
int ListLength(LinkList head, LinkList p) {
    int len = 0;
    p = head->next;
    while (p) {
        p = p->next;
        len++;
    }
    return len;
}

//寻找链表中间的值
int Middle(LinkList head, int n)
{
    LinkList fast = head->next;
    LinkList slow = head->next; // head->data是0,从head->next开始才是真正的链表

    while (fast != NULL && fast->next != NULL) {
        fast = fast->next->next;
        slow = slow->next;
    }
    return slow->data;
}


int main() {
    LinkList L;
    L = CreatLinklist();//创建新的单链表L

    printf("中间元素是:");
    int middle = Middle(L, ListLength(L, L));
    printf("%d", middle);

    return 0;
}

实验结果:
在这里插入图片描述
在这里插入图片描述
做题时遇到的问题:
1.在写创建单链表的函数时return 0,导致返回的值是空,后改为return head。
2.寻找中间值的函数原先是:
int Middle(LinkList head,int n)
{
LinkList fast = head->next; // 第一个结点是头结点,值我设为了-1当然设为什么都可以
LinkList slow = head->next; // 所以从head->next开始才是真正的链表
slow->next = NULL;
fast->next = NULL;

//当n是偶数时
if (n % 2 == 0) {
    slow = head;
    fast = head;
    for (; fast->next != NULL; fast = fast->next)
       fast = fast->next;
    slow = slow->next;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

输出该单链表的中间结点的值,如果链表长度为偶数,则输出中间靠右的结点 的相关文章

  • 解析末尾带有值修饰符('-'、'%')的字符串

    我尝试着去掌握解析 我有一些数据来自de de格式在字符串末尾带有附加信息 我设法使 de de 部分正确 但我很难得到 and 解析正确 我读了codecvt但我不明白这个话题 这是我迄今为止所理解的反映以及我需要做的事情的示例 incl
  • displayformatattribute 自定义字符串格式

    我希望能够将视图模型中的属性标记为在 MVC 视图中显示时使用自定义格式进行格式化 我假设我需要自己的显示格式属性并设置显示格式 但我不确定如何设置此显示格式或在哪里设置 如果我想将数字显示为货币 很简单 只需在属性的构造函数中将 Data
  • 自动调整文本框控件的垂直大小

    在 C 表单中 我有一个面板锚定所有侧面 内部有一个文本框 锚定顶部 左侧 右侧 当文本加载到文本框中时 我希望它自动垂直扩展 这样我就不需要滚动文本框 如果有更多文本不适合面板 最多滚动面板 有什么方法可以用文本框做到这一点吗 我不限于使
  • 使用字典作为数据源绑定组合框

    我正在使用 NET 2 0 并且尝试将组合框的数据源绑定到已排序的字典 所以我收到的错误是 在数据源上找不到 DataMember 属性 Key SortedDictionary
  • unsafePerformIO 和 FFI 库初始化

    我正在为 C 中的库创建一个 FFI 模块 该模块希望在执行其他操作之前调用一个一次性 不可重入的函数 这个调用是幂等的 但是有状态的 所以我可以在每个 Haskell 调用中调用它 但它很慢 并且由于不可重入 可能会导致冲突 那么现在是使
  • 平假名到汉字转换器

    你知道 C 中是否有一个库或字典可以帮助我将平假名翻译成汉字吗 我知道 Windows 有 IME 但我想完全自定义给定平假名的汉字候选列表的设计 但使用此 IME 是不可能的 示例 用户写 toru 首先将其翻译为平假名 我想要这个选择列
  • 错误“标记不是预处理器子表达式中的有效二元运算符”

    如果我构建并运行一个项目 基本上是由 Mac OS 10 6 上的 Qt 框架生成的存根 我会得到以下错误输出 Users home Qt5 0 1 5 0 1 clang 64 include QtCore qisenum h 53 Er
  • Linux 中的 C 聊天室 / Socket 编程

    我有一个简单的服务器和客户端 C 代码来使用线程 pthread 库 为多客户端创建一个聊天室 我一直遇到的问题是 我无法想出一种方法让服务器将客户端通过套接字发送到所有其他客户端的每条消息写入 我在这里读过其他类似的帖子 但很无奈 请帮助
  • 从工作线程 C# CF 在主线程中抛出事件

    我有 可能是 一个简单的问题 我正在使用互操作来调用 CompactFramework 中的异步函数 获得执行结果后 我想引发一个事件 该事件将被表单捕获 并根据结果 我将在屏幕上呈现一些数据 然而 问题是 当互操作函数返回结果时 它会在工
  • 尝试使用 std::add_const 将 T& 转换为 const T&

    我有一个 T 它有一个函数的常量和非常量版本 我想调用该函数的 const 版本 我尝试使用 std add const 将 T 转换为 const T 但它不起作用 我做错了什么以及如何解决它 这是一个简单的例子 void f int s
  • 导出到 Excel 电子表格 (XLSX) 失败

    使用 ASP NET 网页 我将一些数据导出到 Excel 电子表格 XLSX 当我使用 Visual Studio 运行代码时 代码运行良好 它正在导出具有正确数据的 XLSX 文件 但在部署到测试服务器时 相同的代码会失败 它不会抛出任
  • 将 LINQ 序列中的项目发送到返回 void 的方法

    通常 当我处理 LINQ 序列时 我希望将每个项目发送到返回 void 的方法 从而避免 foreach 循环 但是 我还没有找到一种优雅的方法来做到这一点 今天 我写了如下代码 private StreamWriter sw privat
  • SimpleInjector 和 FluentValidationFactory

    我正在尝试自动化视图模型的验证 我知道我可以添加一个属性来指定我的验证 但有一个选项可以设置一个工厂来自动化所有这些 我查看了 这个答案 https stackoverflow com questions 9984144 what is t
  • 如何使用 Azure Active Directory Graph API 获取属于 AppRole 的所有用户

    我一生都无法弄清楚如何查询 Azure Active Directory 的图形 API 来获取属于特定 AppRole 的所有用户 首先我尝试了类似的东西 client Users Where u gt u AppRoleAssignme
  • Visual Studio 2015 解决方案资源管理器中 .cs 文件的点文件图标的含义是什么?

    这个点文件图标是什么意思 这是一个 cs 文件 但它在我的项目中表现不正常 我注意到解决方案资源管理器中有一个单独的图标 我已经检查过MSDN 文档 https msdn microsoft com en us library ms1813
  • pictureBox 图片处理异常

    我最近想尝试一下锻造网 http www aforgenet com framework 因为我发现它非常简单 所以我决定使用 Video FFMPEG 命名空间进行一些简单的视频播放 这样我就可以将每个帧直接放在 pictureBox 上
  • 为什么这段带有“1234”的代码可以在 C++ 中编译?

    为什么会这样编译 char ch 1234 no error 但不能超过 4 个chars char ch 12345 error Too many chars in constant 是的 我知道 用于一个char and 用于字符串 我
  • Pickling 定义为具有 PyObject* 成员的 C 结构的 Python 扩展类型

    我正在通过 Python 运行 C 代码 并且想要 pickle 扩展类型 因此 我有一个 C 结构体 py db manager 其中包含指向数据库对象和对象管理器对象 均用 C 编写 的指针 我用 python 类型对象 t db ma
  • 返回常量引用和右值引用之间的区别

    如果我没记错的话 我认为 const 引用和右值引用都可以绑定到右值 返回前者的函数和返回后者的函数之间有什么实际区别吗 编辑 我无法修改前者 但为什么我会对修改右值感兴趣 是否有意义 A const左值引用可以绑定到任何东西 右值引用只能
  • 从 asp.net 中的 dataSet 获取单个值

    我正在执行查询以从 tbl message 表获取 Title 和 RespondBY 我想在对转发器进行数据绑定之前解密标题 在进行数据绑定之前如何访问标题值 string MysqlStatement SELECT Title Resp

随机推荐

  • pip install scipy时发生zipfile.BadZipFile: File is not a zip file解决办法

    应该是下载时发生了丢包 我在官网下载时 只有14M 切换到豆瓣源有30M 附上地址 https pypi doubanio com simple scipy
  • java程序移植_java JDBC 提高程序可移植性

    介绍jdbc一般的程序 程序编程相关 jb oracle weblogic c 很多java初学者在开始接触jdbc编程的时候 在网上与大部分的教材上都是这样 推荐阅读 Java线程入门 什么是线程 import java sql 扩展信息
  • 预训练语言模型(PLMs)综述

    预训练语言模型 PLMs 内容来自AACL 2022 Tutorial https d223302 github io AACL2022 Pretrain Language Model Tutorial https d223302 gith
  • Mysql进阶索引篇02——InnoDB存储引擎的数据存储结构

    前言 前面我们已经剖析了mysql中InnoDB与MyISAM索引的数据结构 了解了B 树的设计思想 原理 并且介绍了B 树与Hash结构 平衡二叉树 AVL树 B树等的区别和实际应用场景 页和页之间并不一定在物理上相连 只是在逻辑上使用双
  • java内存

    在java视频中 一直强调java内存的重要性 如果真正理解 了java内存的分配情况和程序运行时的java内存 那么你会对 java编程的思想 会更加深刻 Java内存分配与管理是Java的核心技术之一 Java的内存分配有三种 一 静态
  • 使用WPD API操作MTP设备一些总结

    使用WPD API操作MTP设备总结 本文分为两部分 1 WPD基本架构和概念的理解 2 使用WPD API操作MTP 拷贝 删除 设备 1 WPD基本架构和概念 1 1 WPD架构 原文 https docs microsoft com
  • Vue脚手架的安装配置以及使用

    安装Vue脚手架 1 需要安装nodejs支持 去nodejs官网下载对应版本的nodejs 可以使用installer 选择安装目录点击安装 也可以使用binary文件 直接选择文件夹解压缩 安装完成后如上图所示 然后配置环境变量 1 添
  • C++中指针和应用有哪些区别?

    a 指针是一个新的变量 存储了另一个变量的地址 我们可以通过访问这个地址来修改另一个变量 引用只是一个别名 还是变量本身 对引用的任何操作就是对变量本身进行操作 以达到修改变量的目的 b 引用只有一级 而指针可以有多级 c 指针传参的时候
  • show processlist 命令执行结果解释

    show full processlist show processlist 显示哪些线程正在运行 也可以通过 INFORMATION SCHEMA PROCESSLIST 表或 mysqladmin processlit 获取这些信息 如
  • 设计模式-状态模式(State)

    文章目录 前言 状态模式的核心概念 状态模式的用途 示例 状态模式的Java实现 状态模式优缺点 总结 前言 当我们需要在对象的生命周期中管理不同状态时 状态模式 State Pattern 是一种有用的设计模式 在这篇博客中 我们将介绍状
  • 免费的 PPT 模版资源

    1 第一 PPT 第一PPT站内资源以免费下载为基础 本着开放的共享为原则 服务于国内广大国内PPT爱好者 目前第一PPT站内的所有PowerPoint资源 PPT模板 PPT背景 PPT 素材 PPT教程 PPT软件 均是免费下载 所以请
  • openVPN服务端搭建

    搭建步骤 云服务器 Ubuntu 20 04 1 LTS 搭建服务端 公网IP 47 215 测试客户端 部门内部成员的windows10 或者windows11 及mac电脑 还有现场linux环境 最后目标是实现所有客户端之间能够互联
  • Electron桌面程序开发入门

    1 Electron结合vue项目配置 Electron是利用web前端技术进行桌面应用开发的一套框架 是由 github 开发的开源框架 允许开发者使用 Web 技术构建跨平台的桌面应用 它的基本结构 Electron Chromium
  • Vuluhub靶场-breach1

    网络设置和准备 该靶场的ip 192 168 110 140 我们要设置为仅主机模式 在虚拟机中将仅主机模式的ip地址范围包含靶机的ip 除了网络设置 还要准备两台kali 一台连接外网 一台和靶机一样要仅主机模式 信息收集 Nmap扫描
  • lvgl 自定义控制表格行高、颜色和外框样式

    lvgl 自定义控制表格行高 颜色和外框样式 lvgl版本 8 3 7 lvgl自带表格控件能够指定列宽 但是表格行高是根据内容动态渲染的 表格自带样式如图 带有蓝色的外框和白底 如果想要手动控制表格行高 颜色和外框等属性 需要监听表格绘制
  • 国产加密实际运用:使用SM3加盐存储密码,并且使用SM2进行登录认证

    目录 1 简要 2 开发环境及工具 3 后台密码加密部分 3 1加密代码 3 2 SM3加密类 Sm3crypto 3 3国密SM3工具类 Sm3Utils 3 4国密相关依赖包 4 登录认证部分 4 1前端部分关键代码 4 2后端logi
  • 查看tensorflow是否支持GPU,以及测试程序

    测试程序 Python import tensorflow as tf hello tf constant Hello TensorFlow sess tf Session print sess run hello 是否支持GPU impo
  • 【新手入门篇】React+ant design

    本篇着重讲解如何使用官方的demo 至于React及antd的安装及配置在本文末尾会给出相应的参考链接 创建一个React项目之后 create react app 你的项目名 在新建的项目目录下引入antd组件库 yarn add ant
  • Ubuntu 23.10 支持基于 TPM 的全磁盘加密

    将于下个月发布的 Ubuntu 23 10 增加了一项实验性功能 初步支持基于 TPM 的全磁盘加密 该功能利用系统的可信平台模块 TPM 缺点是这种额外的安全性依赖于 Snaps 包括内核和 GRUB 引导加载器 Ubuntu 开发商 C
  • 输出该单链表的中间结点的值,如果链表长度为偶数,则输出中间靠右的结点

    输出该单链表的中间结点的值 如果链表长度为偶数 则输出中间靠右的结点 题目要求 输入数据创建一个单链表 实现一种算法 输出该单链表的中间结点的值 如果链表长度为偶数 则输出 中间靠右 的结点 如果链表只有一个元素 则输出唯一的元素 算法思路