【牛客刷题专栏】0x08:C数据结构栈实现反转链表

news2024/11/19 3:26:44

前言

  • 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失
  • 个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 牛客数据结构题目位置如下:
    在这里插入图片描述

目录

  • 前言
  • 问题描述:
  • 举例:
  • 解法思路1:
  • 代码结果1:
  • 解法思路2:
  • 代码结果2:
  • 结束语


问题描述:

给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。

数据范围:0≤n≤1000
要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。

如当输入链表{1,2,3}时,
经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
以上转换过程如下图所示:
在这里插入图片描述


举例:

//例1:
//输入:
{1,2,3}
//返回值:
{3,2,1}
//============
//例2:
//输入:
{}
//返回值:
{}
//说明:空链表则输出空

解法思路1:

  • 直接使用最后一个结点当做头结点

代码结果1:

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

/**
 * @param pHead ListNode类 
 * @return ListNode类
 */
struct ListNode* ReverseList(struct ListNode* pHead ) 
{
    //如果只有一个结点 或者 无结点 返回本身
    if(pHead->next == NULL || pHead == NULL)
    {
        return pHead;
    }
    struct ListNode *p,*q;
    p = pHead;
  //q指向最后一个结点 p指向倒数第二个结点
    while(p)
    {
        if(p->next->next == NULL)
        {
            q = p->next;
            break;
        }
        p = p->next;
    }
    q->next = NULL;
    p->next = NULL;
    //头插法
    while(pHead)
    {
        p = pHead;
        pHead = pHead->next;
        p->next = q->next;
        q->next = p; 
    }
    return q;
}


解法思路2:

  • 创建头结点

代码结果2:

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

/**
 * @param pHead ListNode类 
 * @return ListNode类
 */
struct ListNode* ReverseList(struct ListNode* pHead )
{
    //若pHead 不存在 在直接返回pHead
    if(!pHead) return pHead;
    //创建一个头结点
    struct ListNode *L = (struct ListNode*)malloc(sizeof(struct ListNode));
    L->next = NULL;
    struct ListNode *p;
    p = pHead;
    //头插法
    while(p)
    {
        struct ListNode *q = p->next;
        p->next = L->next;
        L->next = p;
        p = q;
    }
    return L->next;
}

结束语

  • 以上就是C数据结构栈实现反转链表的内容。可以在牛客尝试刷几道题目来练习实践。牛客网刷题(点击可以跳转),可以尝试注册使用。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytest+Unittest+Git+Jenkins企业级CICD自动化测试平台建设方案

随着持续集成的引入,项目中的自动化测试用例越来越多,每轮执行所消耗的时间也越来越久。 要提高自动化测试用例执行的效率,以下几点是需要考虑的根本点。 (1)公司项目的交付策略如何 首先,测试团队服务于…

Autosar MCAL-ICU输入捕获

文章目录前言ICUIcuChannelIcuChannelIdIcuDefaultStartEdgeIcuMeasurementModeIcuSignalTypeIcuWakeupCapability子配置项IcuSignalMeasurementIcuSignalMeasurementPropertyIcuDutycycleBufferMarkerIcuOptionalApisIcuGetDutyCycleValuesApiIcuSetModeApiIcuSignalMeasureme…

尝试模仿现实通讯录

学习C语言已有一段时间,我虽不敢说代码水平尚可,但学习一段时间总需要有些成果。下半年开学后,专业课程增多,我需要每天完成学校任务,所花的时间也不算少,但还是有些空闲的。想起自己之前学过用C语言写通讯…

小程序开发必备功能的吐血整理【个人中心界面样式大全】

📌个人主页:个人主页 ​🧀 推荐专栏:小程序开发成神之路 --(这是一个为想要入门和进阶小程序开发专门开启的精品专栏!从个人到商业的全套开发教程,实打实的干货分享,确定不来看看? &…

FPGA学习笔记(七)verilog的深入学习之任务与函数(语法篇3)

目录任务与函数任务任务的基本概况自动(可重入)任务函数函数概述自动(递归)函数常量函数带符号函数条件编译在之前学习的基础上,继续加深对Verilog HDl的学习 前两个见: FPGA学习笔记(二&#…

深度学习(python)——神经网络(Artificial Neural Networks)激活函数代码

目录 1.概述 2.激活函数 (1)基本概念 (2)sigmoid函数(常用) 代码(sigmoid) (3)阶跃函数 代码(阶跃函数) (4)ReLU函数(目…

【零基础算法】C语言实现二叉搜索树

目录 一,定义 二,性质 三,基本操作 1,初始化 2,查找 3,插入(建树) 4.删除结点 四,总结 一,定义 二叉查找树(Binary Search Tree&#…

记一次网络安全渗透测试实战指南

1.信息收集 网址已无法访问,就不贴了 可以使用Fofa,火线,zoomeye,searchcode.com等爬取相关的资产,重点关注一些有漏洞暴露的框架和服务例如:泛微,PHP,Tomca,后台&#x…

71.(后端)角色接口携带权限数据——flask两张表之间多对多关系的使用与层级关系的输出

1.ORM关系之多对多 1.1 什么时候使用多对多关系 例如,我们我们的项目中,一个用户可以拥有多个角色,同样的,一个角色可以给多个用户。通俗来说,一个用户可以购买多个商品,多个商品可以被一个用户购买 1.2…

【FPGA】Verilog编程实现SDRAM读写(一) ----- 初始SDRAM

文章目录一. 存储器及SDRAM分类1. 存储器分类2. 半导体存储器分类3. SDRAM分类二. 什么是SDRAM?1. SDRAM基本概念2. SDRAM存储阵列3. SDRAM基本存储单元4. BANK概念5. SDRAM容量计算6. SDRAM功能框图7. SDRAM信号引脚8. SDRAM操作命令8.1 禁止命令( INHI…

mysql做查询时,第一次很慢,第二三次就会很快?

前言 sql语句第一次查询慢的原因不仅仅是因为执行计划没有被缓存这么简单,有时候你会发现sql语句重用了执行计划,但是第一次查询时还是很慢. 最主要的原因是第一次查询的时候,mysql会将查询出的部分数据和索引从磁盘加载到内存作为缓存,而第二三此查询的时候就直接从内存缓存…

Spring - 手把手分析 IoC 容器创建过程

概述 这里我们以 Spring 5.2.8.RELEASE 版本为例,看一下 IoC 容器 的创建过程。同时我们使用 java-based 的方式实例化 IoC 容器,即使用 AnnotationConfigApplicationContext Configuration 的方式配置容器需要的组件。 ApplicationContext ctx new …

【云IDE初体验】与君相逢恨晚,真正的轻量级开发工具

云IDE产品介绍 云IDE使用教程 免费使用地址:点击【云IDE】,即可开始创建工作空间啦~ 云IDE1.云IDE介绍2. 使用流程3. 体验总结作为一名大学生,学习的地点很关键,尤其是我们计算机系,更是离不开电脑,去图书馆…

调度线程池 ScheduledThreadPoolExecutor 的正确使用姿势

前言 项目中经常会遇到一些非分布式的调度任务,需要在未来的某个时刻周期性执行。实现这样的功能,我们有多种方式可以选择: Timer类, jdk1.3 引入,不推荐 它所有任务都是串行执行的,同一时间只能有一个任…

【C语言】移位操作符 位操作符 - 对二进制位进行精准操作【+面试题目】_[初阶篇]

快速导航 【前言】 1.移位操作符 1.1左移操作符(<<) 1.2右移操作符(>>) 2.位操作符 2.1 & 按位与 2.2 | (按位或) 2.3 ^ (按位异或) 3.面试题目 3.1 交换两个变量&#xff08;不创建临时变量&#xff09; 3.2统计二进制中1的个数 3.2.1 方法一&#xff1a;…

复合事件归因分析

1 复合事件 1.1 概述 1.2 类型 1.2.1 先决条件事件&#xff08;preconditioned events&#xff09; 1.2.2 多变量事件&#xff08;multivariate CEs&#xff09; eg.高温干旱 1.2.3 时间复合事件&#xff08;temporally CEs&#xff09; eg.旱涝急转 1.2.4 空间复合事件…

电子电路设计基本概念100问(二)【学习目标:原理图、PCB、阻抗设计、电子设计基本原则、基本原器件等】

笔者电子信息专业硕士毕业&#xff0c;获得过多次电子设计大赛、大学生智能车、数学建模国奖&#xff0c;现就职于南京某半导体芯片公司&#xff0c;从事硬件研发&#xff0c;电路设计研究。对于学电子的小伙伴&#xff0c;深知入门的不易&#xff0c;特开次博客交流分享经验&a…

【每天学习一点新知识】网络安全--拒绝服务攻击

目录 1、SYN泛洪攻击 SYN泛洪攻击原理 攻击过程 防御机制 2、Smurf攻击 Smurf攻击原理 间接攻击 放大攻击 防御机制 3、DDoS DDoS原理 直接DDoS攻击 间接DDoS攻击 防御机制 1、SYN泛洪攻击 SYN泛洪攻击原理 终端访问Web服务器之前需要和服务器之间建立TCP连接。W…

万字长文解析Scaled YOLOv4模型(YOLO变体模型)

一&#xff0c;Scaled YOLOv4 摘要1&#xff0c;介绍2&#xff0c;相关工作 2.1&#xff0c;模型缩放 3&#xff0c;模型缩放原则 3.1&#xff0c;模型缩放的常规原则3.2&#xff0c;为低端设备缩放的tiny模型3.3&#xff0c;为高端设备缩放的Large模型 4&#xff0c;Scaled-YO…

大学毕业后,我就送了2个月外卖,哭了一整晚

先简单介绍一下自己&#xff0c;我来自湛江&#xff0c;大学学的的物流管理专业&#xff0c;现在就职于一家互联网公司&#xff0c;从事软件测试工作。 我来自湛江的一个偏远农村&#xff0c;家里兄弟姐妹多&#xff0c;父母无力负担我的学费&#xff0c;很多时候学费都是靠姐…