剑指offer——day2

2023-11-12

题目一
在这里插入图片描述

思路:两次遍历。一次遍历出链表的元素个数。第二次依次插入数据

int* reversePrint(struct ListNode* head, int* returnSize){
    int i=0;
    struct ListNode*cur=head;
    while(head)
    {
        head=head->next;
        i++;
    }
    *returnSize=i;
    int*res=(int*)malloc(sizeof(int)*i);
    while(cur)
    {
        res[--i]=cur->val;
        cur=cur->next;
    }
    return res;
}

题目二
在这里插入图片描述

思路:头插法

struct ListNode* reverseList(struct ListNode* head)
{
    if(head==NULL)
        return head;
    struct ListNode*Head=NULL;
    while(head)
    {
        struct ListNode*newnode=head;
        struct ListNode*next=head->next;
        newnode->next=Head;
        Head=newnode;
        head=next;
    }
    return Head;
}

题目三
在这里插入图片描述

第一次遍历:先将复制的结点链接在原结点的后面,不管随机指针。
第二次遍历,复制结点的随机指针指向原结点随机指针的下一个结点
第三次遍历:将现在的链表拆分为两个链表;方法为尾插法

class Solution {
public:
    Node* copyRandomList(Node* head) {
        Node* cur=head;
        while(cur)
        {
            Node* next=cur->next;
            Node* newcode=(Node*)malloc(sizeof(Node));
            newcode->val=cur->val;
            newcode->next=next;
            cur->next=newcode;
            cur=next;
        }
        //处理随机指针
        cur=head;
        while(cur)
        {
            Node*next=cur->next->next;
            Node*newcode=cur->next;
            if(cur->random!=NULL)
            {
                newcode->random=cur->random->next;
            }
            else
            {
                newcode->random=NULL;
            }
            cur=next;
        }
        //拆为目标链表,使用尾插法
        Node*newhead=NULL;
        Node*tail=NULL;
        cur=head;
    while(cur)  
    {
        Node*newcode=cur->next;
        Node*next=newcode->next;
        if(newhead==NULL)
        {
            newhead=tail=newcode;
        }
        else
        {
            tail->next=newcode;
            tail=newcode;
        }
        cur->next=next;
        cur=next;
    }
    return newhead;
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剑指offer——day2 的相关文章

随机推荐

  • 三分钟学会国产低功耗华大单片机二(MDK中下载与仿真)

    一 准备工作 使用micro USB 将开发板与电脑相连 打开一个已经存在的工程 工程如何建立请参考 三分学会国产低功耗华大单片机一 MDK中新建工程 二 工程的编译 点击魔法棒图标如下图所示 点击Device在芯片型号选择框中选中所选单片
  • Autofac与WebApi集成

    目录 Autofac原理 如何将Autofac与Web API集成 Autofac功能详解 1 HttpConfiguration 2 控制器 3 解析器 4 过滤器 1 注册过滤器提供程序 2 实现过滤器接口 3 注册过滤器 4 过滤器覆
  • React结合Ant Design Pro开发项目理解(service、model、index等文件逻辑关系)

    组件中传值 react 值写在了视图层 Antd pro 值写在model层 通过saveState扩展表达式 把值更新到state后会触发视图层的render方法 通过props获取model中的值 下图是整个项目各模块的关系 大概流程是
  • 基于AntDesign实现的React.js自定义可编辑表格,带翻译功能

    基于React AntDesign实现的一个自定义的可编辑表格 主要用于数据库表字段的编辑 带翻译功能 稍作修改后也可复用到其他地方 主要包括三个文件 index js EditableTable js EditableTable less
  • Matlab R2018b激活教程

    最近重装了系统 又正好需要用一下Matlab 所以就来研究一下如何激活 目前Matlab最新的版本是R2018b 所以我找的也是R2018b的激活教程 再次提醒 如果有条件请支持正版 资源准备 很幸运 我发现已经有人将Matlab R201
  • Linux文件操作命令及磁盘分区与文件系统

    一 cd命令 cd change directory 切换目录 这是用来切换工作目录的命令 注意目录名称和cd命令之间存在一个空格 在介绍cd命令的时候 首先我们来了解相对路径和绝对路径 绝对路径 路径的写法 一定由跟目录 写起 例如 da
  • QTabWidet设置不同Position,tabBar文字均水平显示

    设置QTabWidget在不同方向上的文字均水平显示 有两种方法 如下 1 设置不同Position tabBar文字均水平显示 QTabWidget设置在设置Position为East或者West时 文字方向默认会从下到上显示 先通过以下
  • Connection Refused Error:[WinError 10061]

    问题 Vscode左边栏选项 运行和调试 运行Python Django 程序报错 sock connect host port ConnectionRefusedError WinError 10061 由于目标计算机积极拒绝 无法连接
  • js数据类型学习笔记

  • Scala安装与环境配置

    一 Scala和Python java的区别 Scala是一门多范式编程语言 用于操作Spark 相较于java 由于Spark底层用Scala编写 因此对于大数据Spark项目场景Scala代码更加简洁 java过于冗长 并且Scala支
  • 自编码器(Auto Encoder)原理及其python实现

    目录 一 原理 二 为什么要使用自编码器 三 代码实现 1 原始自编码器 2 多层 堆叠 自编码器 3 卷积自编码器 4 正则自编码器 4 1稀疏自编码器 四 降噪自编码器 五 逐层贪婪训练堆叠自编码器 参考 一 原理 自编码器由两部分组成
  • Android-数据存储(上)

    一 Debug调试 1 跟踪程序的运行过程 找出问题出现的地方 更快的解决问题 bug 2 梳理已有功能代码的运行逻辑流程 二 数据存储 1 sp存储 2 手机内部存储 3 手机外部存储 三 练习
  • java中定义byte数组,浅谈java的byte数组的不同写法

    由于篇幅原因阐述的不够详细科学 不喜勿喷 经常看到java中对byte数组的不同定义 粗略整理的一下 一个字节 byte 8位 bit byte数组 里面全部是 byte 即每一个byte都可以用二进制 十六进制 十进制来表示 二进制 00
  • Unity——LitJSON的安装

    一 LitJSON介绍 特点 LitJSON是一个轻量级的C JSON库 用于在Unity游戏开发中进行JSON数据的序列化和反序列化操作 它提供了简单而高效的接口 帮助开发者处理JSON数据 以下是LitJSON库的一些主要特点和功能 1
  • 用面向对象方法进行俄罗斯方块游戏设计(持续更新中)

    游戏介绍 顾名思义 俄罗斯方块自然是俄罗斯人发明的 这位伟人叫做阿列克谢 帕基特诺夫 Alexey Pazhitnov 这款游戏操作简单 老少皆宜 也是一个不错的练手项目 首先给几个经典的游戏界面先 当然 我们的目的是做出类似的效果 游戏界
  • 女程序员的反思

    鉴于大家对此的热情 我增添些具体的开发感受 希望能帮到和我有一样困惑的姐妹们 也希望各路IT大牛前来指导 工作已有8个多月 不间断的大小项目共5个 一直觉得很疲惫 除了本应该烦累的工作外 自己性格上的各种不适应加重了疲惫感 可能是前一个项目
  • Buildroot用户指南

    第一章 关于Buildroot Buildroot是一个包含Makefile和修补程序 patch 的集合 这个集合可以使你很容易的为你的目标构建交叉工具链 cross compilationtoolchain 根文件系统 root fil
  • python解析excel文件

    通过openpyxl库解析excel文件 from openpyxl import load workbook class ParseExcel object 解析excel文件 def init self 获取excel路径 self d
  • iOS app上架图文教程及注意事项

    网上的ios app上架流程比较多 但基本上都不全 此文档按照步骤进行的 比较推荐 自己按照教程正式走了一遍发现了很多问题 很多都是遇到问题解决问题 整个流程所花费的流程不下一周时间 所以为了让大家了解苹果公司的相关规定 让兄弟们少走弯路
  • 剑指offer——day2

    题目一 思路 两次遍历 一次遍历出链表的元素个数 第二次依次插入数据 int reversePrint struct ListNode head int returnSize int i 0 struct ListNode cur head