简单记录一下剑指offer的编程题(C语言实现)——替换空格反转链表

news2024/10/7 16:18:30

1. 替换空格 (剑指 Offer 05)

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例:

输入:s = "We are happy."
输出:"We%20are%20happy."

简单分析:
新建一个数组,长度为替换空格后的长度+1,遍历原始数组,往新数组中按顺序添加字符

char* replaceSpace(char* s){
  int count = 0;                    //记录原始数组中有几个空格
  int flag = 0;                     //新数组的索引
  int len = strlen(s);              //计算原始数组长度
  for(int i = 0; i < len; i++){     //计算有几个空格
      if(s[i] == ' '){
          count++;
      }
  }
   char* s1 = (char*)malloc(sizeof(char) * (1 + len + count * 2 ));  //申请动态数组
   for(int i = 0; i < len; i++){     //遍历原始数组,新数组依次进行添加字符
       if(s[i] == ' '){
           s1[flag] = '%';
           s1[flag + 1] = '2';
           s1[flag + 2] = '0';
           flag = flag + 3;
       }else{
           s1[flag] = s[i];
           flag++;
       }
   }
   s1[flag] = '\0';        //这里是flag,因为已经加1了,就是最后一个值了; 不加这个,会报堆栈溢出;字符串以'\0'结尾,一定要加上
   return s1;
}

2. 反转链表

链表是带指针的结构体;

//链表的定义
  struct ListNode {
      int val;
     struct ListNode *next;
  };

在这里插入图片描述`

struct ListNode* reverseList(struct ListNode* head){
    
    //双指针迭代
    struct ListNode* pre = NULL;          //记录前一个结点
    struct ListNode* cur = head;          //记录当前一个结点
    struct ListNode* next = NULL;         //记录下一个结点

    while(cur != NULL){
      next = cur->next;                   //next指向头结点的下一个结点
      cur->next = pre;                    //使当前结点指向前一个结点
      pre = cur;                          //移动pre指针位置,pre指向现在的当前结点
      cur = next;                         //移动cur指针位置, cur指向下一个结点
    }
    return pre;                           //返回pre为新的头节点
}

这里的while中的内容不能改成:

 while(cur != NULL){
      cur->next = pre;                    //使当前结点指向前一个结点
      pre = cur;                          //移动pre指针位置,pre指向现在的当前结点
      cur = cur->next;                    //移动cur指针位置, cur指向下一个结点
    }

因为已经对cur->next进行操作了,即cur指向前一个结点,现在再移动cur的指针位置,已经和头结点的下一个结点断开了,找不到下一个节点的位置了,所以还是要引入新的结点变量,来记录头节点的下一结点来完成遍历链表。

整体思想是:
记录头节点下一节点位置;(记录)
改变当前结点指向,使其指向前一结点;(重指向)
移动当前和前一结点指针位置,使当前节点指针指向下一结点位置,前一结点指向当前节点位置。(移动双指针)

//使用头插法
 struct ListNode *L = (struct ListNode*)malloc(sizeof(struct ListNode));   //创建一个头结点
  
  L->next = NULL;                       //使头结点的下一个结点是NULL
  
  struct ListNode *cur = head;         //记录当前一个结点
  struct ListNode *next = NULL;        //记录下一个结点

  while(cur != NULL){                  //判断当前结点是否为null
     next = cur->next;                 //记录下一个结点,next指向头结点的下一个结点
     cur->next = L->next;              //新插入的当前结点指向(开始)头结点的下一个结点
     L->next = cur;                    //头结点的下一个节点指向新插入的当前结点
     cur = next;                       //移动cur指针位置, cur指向下一个结点
  }
return L->next;                        //返回头结点的下一个结点为新的头节点

整体思想是:
创建一个新的头结点,指向为空;(创建)
记录开始头节点head的下一节点位置;(记录)
新插入的当前结点指向新的头结点的下一个结点;(重指向)
头结点的下一个节点指向新插入的当前结点;(重指向)
移动当前指针位置, 使当前的指针指向下一个结点。(移动)

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

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

相关文章

《SpringBoot篇》16.SpringBoot整合Elasticsearch

陈老老老板 说明&#xff1a;工作了&#xff0c;学习一些新的技术栈和工作中遇到的问题&#xff0c;边学习边总结&#xff0c;各位一起加油。需要注意的地方都标红了&#xff0c;还有资源的分享. 一起加油。 本文是介绍Elasticsearch用法与SpringBoot整合 1.ES简介 注&#xf…

Solus Linux 4.4版本发布

导读Solus Linux近日更新到4.4版本&#xff0c;作为这个受爱好者欢迎的Linux发行版的最新增量更新&#xff0c;团队仍在努力实现其基于Serpent OS和对Linux发行版的其他重大基本变化的纳入。 Solus 4.4带有各种各样的更新包&#xff0c;还有一些其他的改变&#xff0c;比如现在…

【C++学习记录】(二)--一个C++工程文件里有哪些东西?

写在前面 首先&#xff0c;我有一个完整的C工程文件&#xff0c;文件分别是包含Debug、include、Service和src。 1.了解文件结构: 首先&#xff0c;查看每个文件夹中的内容以了解文件的组织结构。Debug文件夹通常包含与调试相关的文件&#xff0c;include文件夹可能包含头文件…

Innovus:highlight clock tree(高亮时钟树方法)

过往文章链接&#xff1a; ICC2: highlight clock tree&#xff08;高亮时钟树方法&#xff09; innovus也有高亮clock tree的方法 在ccopt之后&#xff0c;使用ctd_win命令打开Clock Tree Debugger (CTD) window。 ctd_trace -from $root_pin -to $sink_pin -color $color ;#…

产品介绍|持续机器视觉产品的研发与迭代,赋能制造行业智慧生产

当前&#xff0c;以人工智能为代表的新一代信息技术正在加速推动社会各领域优化升级&#xff0c;对于行业自动化、智能化的要求越来越高&#xff0c;作为人工智能重要领域之一的机器视觉技术&#xff0c;迎来了快速发展。 机器视觉用机器代替人眼来做测量和判断&#xff0c;通…

STM32MP157驱动开发——设备树知识

文章目录 概述开发板中设备树文件目录结构设备树文件语法设备树文件参考实例&#xff1a;Devicetree 格式DTS 文件的格式node 的格式properties 的格式 dts 文件包含 dtsi 文件常用的属性#address-cells 、#size-cellscompatiblemodelstatusreginterruptgpio属性name( 过时了&a…

SSM框架整合

1.创建数据库表 数据库环境搭建 CREATE DATABASE ssmbuild;USE ssmbuildDROP TABLE IF EXISTS books;CREATE TABLE books( bookID INT(10) NOT NULL AUTO_INCREMENT COMMENT 书id, bookName VARCHAR(100) NOT NULL , bookCounts INT(11) NOT NULL , detail VARCHAR(200) NOT …

【Netty】NIO基础(三大组件、文件编程)

文章目录 三大组件Channel & BufferSelector ByteBufferByteBuffer 正确使用姿势ByteBuffer 内部结构ByteBuffer 常见方法分配空间向 buffer 写入数据从 buffer 读取数据mark 和 reset 字符串与 ByteBuffer 互转Scattering ReadsGathering Writes粘包、半包分析 文件编程Fi…

美团青龙教程(2023.3.2最新版)附脚本

这次直接放上leaffish大佬的库地址吧&#xff0c;美团脚本也在里面 &#xff08;此为最新脚本&#xff09; ql raw https://raw.githubusercontent.com/leafTheFish/DeathNote/main/meituanV3.js /* 美团 v3.02 新版美团仅支持青龙等nodejs环境, 不支持圈X 自动领券和完成一…

HTML5+CSS3+JS小实例:快捷菜单图标按钮交互特效

实例:快捷菜单图标按钮交互特效 技术栈:HTML+CSS+JS 字体图标库:font-awesome 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name…

6.7Jmeter5.1,非GUI模式,通过命令行传递线程数

原创文章&#xff0c;谢绝转载。 一、前提 本次做性能测试&#xff0c;需求是需要在Linux下的非GUI模式下执行。但用命令行执行时&#xff0c;线程数需要改变&#xff0c;为了执行方便&#xff0c;不需要每次都在脚本中修改线程数&#xff0c;那么线程数都需要通过参数传递&…

Flutter III 之你不知道的 PlatformView 的混乱之治

如果你是从 2018 年开始使用 Flutter &#xff0c;那么相信你对于 Flutter 在混合开发的支持历程应该会有一个深刻的体会&#xff0c;如果你没尽力过这个时期&#xff0c;不要担心&#xff0c;通过我过往 PlatformView 的相关文章&#xff0c;你也可以有一个清晰的感受&#xf…

python 乘法口诀

下面是一个用Python打印乘法口诀表的代码&#xff1a; print("乘法口诀表:")for i in range(1, 10):for j in range(1, i1):print(f"{j} {i} {i*j}", end"\t")print()

AI绘画创意文字全流程揭秘,你的终极文字艺术实操宝典

本教程收集于&#xff1a;AIGC从入门到精通教程汇总 AIGC技术不断更新迭代&#xff0c;国内出现了越来越多的新玩法&#xff0c;比如最近大家都在热议的AI绘画创意文字。 过去的一周&#xff0c;我把这些新玩法都研究了一遍&#xff0c;并总结了一套完整的制作流程。 主流的…

马斯克重返人工智能赛道,官宣成立xAI

KlipC报道&#xff1a;马斯克宣布成立xAI人工智能公司。 KlipC的合伙人Andi Duan表示&#xff1a;“马斯克称xAI公司的目标是了解宇宙的真实本质&#xff0c;同时也向ChatGPT等热门人工智能应用发起挑战。 Duan先生指出自OpenAI去年年底推出ChatGPT以来&#xff0c;马斯克就在A…

全网首发!精选32个最新Python实战项目(附源码),拿走就用!

Python是目前最好的编程语言之一。由于其可读性和对初学者的友好性&#xff0c;已被广泛使用。那么要想学会并掌握Python&#xff0c;可以实战的练习项目是必不可少的。接下来&#xff0c;我将给大家介绍32个非常实用的Python项目&#xff0c;帮助大家更好的学习Python。大家也…

C/C++ 辗转相除与更相减损求最大公约数公倍数

古人有两种求最大公约数的方法 最小公倍数 &#xff08;a * b&#xff09; / 最大公约数 1.辗转相除&#xff08;欧几里得-《几何原本》&#xff09; 我认为辗转相除的的稳定性要强过更相减损&#xff0c;因为减法在数差距较大时效率会较低。 辗转相除注意考虑0的问题&#x…

AIGC全新升级!Share Creators现已提供更加强大的AIGC功能及体验!

AIGC全称AI Generated Content,即人工智能生产的内容,被认为是继PGC、UGC之后的新型内容创作方式。在技术上&#xff0c;AIGC能够以优于人类的制造能力和知识水平承担信息挖掘、素材调用、复刻编辑等基础性机械劳动&#xff0c;从技术层面实现以低边际成本、高效率的方式满足海…

科技云报道:成立11年,青云的变与不变

科技云报道原创。 成立于2012年的青云科技&#xff0c;迎来了自己的11周年。 对于高速发展的云计算行业来说&#xff0c;“十年”这一节点更是承载了太多的命题。 过去11年&#xff0c;青云在云计算巨头和IT大厂的环伺之下一路拼杀&#xff0c;终以“混合云第一股”的身份登上…

Rancher 系列文章-RHEL7.8 离线有代理条件下安装单节点 Rancher

一 基础信息 1.1 前提 本次安装的为 20220129 最新版&#xff1a;Rancher v2.6.3VM 版本为 RHEL 7.8, 7.9 或 8.2, 8.3, 8.4(Rancher 官网要求&#xff09;VM YUM 仓库&#xff1a;已配置对应版本的 RHEL 和 EPEL YUM 仓库VM 提供 root 权限已配置 ntp&#xff08;防止因为时…