【20221225】【剑指1】链表

news2024/11/26 2:04:19

1、从尾到头打印链表

可以用rbegin,rend;也可以用reverse翻转数组。

2、如果是翻转链表的话(双指针法,用虚拟头节点依次翻转):https://blog.csdn.net/HYAIWYH/article/details/127118468?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167194876116800217017779%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167194876116800217017779&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-3-127118468-null-null.blog_rank_default&utm_term=%E7%BF%BB%E8%BD%AC%E9%93%BE%E8%A1%A8&spm=1018.2226.3001.4450icon-default.png?t=M85Bhttps://blog.csdn.net/HYAIWYH/article/details/127118468?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167194876116800217017779%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167194876116800217017779&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-3-127118468-null-null.blog_rank_default&utm_term=%E7%BF%BB%E8%BD%AC%E9%93%BE%E8%A1%A8&spm=1018.2226.3001.4450

class Solution {
public:
    vector<int> reversePrint(ListNode* head) {
        ListNode* cur=head;
        int count=0;
        while(cur!=NULL)
        {
            count++;
            cur=cur->next;
        }
        vector<int> result(count);    
        cur=head;
        for(auto i=result.rbegin();i!=result.rend();i++)
        {
            *i=cur->val;
            cur=cur->next;
        }    
        return result;
    }
};

3、复杂链表的复制

给定链表的头节点时,复制链表变得简单,只需要对链表进行遍历,每轮建立新节点 + 构建前驱节点 pre 和当前节点 node 的引用指向即可

本题链表的节点新增了 random 指针,指向链表中的 任意节点 或者 nullnull 。这个 random 指针意味着在复制过程中,除了构建前驱节点和当前节点的引用指向 pre.next ,还要构建前驱节点和其随机节点的引用指向 pre.random 。

遍历复制可以构建next引用指向,但无法构建random引用指向。

如果没有random指针时:

class Solution {
public:
    Node* copyRandomList(Node* head) {
        Node* cur = head;
        Node* dum = new Node(0), *pre = dum;
        while(cur != nullptr) {
            Node* node = new Node(cur->val); // 复制节点 cur
            pre->next = node;                // 新链表的 前驱节点 -> 当前节点
            // pre->random = "???";          // 新链表的 「 前驱节点 -> 当前节点 」 无法确定
            cur = cur->next;                 // 遍历下一节点
            pre = node;                      // 保存当前新节点
        }
        return dum->next;
    }
};

利用哈希表的查询特点,构建 原链表节点 和 新链表对应节点 的键值对映射关系,再遍历构建新链表各节点的 next 和 random 引用指向即可。

算法流程:

class Solution {
public:
    Node* copyRandomList(Node* head) {
        if(head==NULL)  return NULL;
        unordered_map<Node*,Node*> map;
        Node* cur=head;
        while(cur!=NULL)
        {
            map[cur]=new Node(cur->val);
            cur=cur->next;
        }
        cur=head;
        while(cur!=NULL)
        {
            map[cur]->next=map[cur->next];
            map[cur]->random=map[cur->random];
            cur=cur->next;
        }
        return map[head];
    }
};

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

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

相关文章

java ssm 摄影约拍系统的设计

目录 第一章 绪论 5 1.1 研究背景 5 1.2系统研究现状 5 1.3 系统实现的功能 6 1.4系统实现的特点 6 1.5 本文的组织结构 6 第二章开发技术与环境配置 7 2.1 Java语言简介 7 2.2JSP技术 8 2.3 MySQL环境配置 8 2.4 MyEclipse环境配置 9 2.5 mysql数据库介绍 9 2.6 B/S架构 9 第三…

6、集合介绍

文章目录6、集合6.1 介绍6.2 常用接口和类6.3 ArrayList6.3.1 介绍6.3.2 基本操作6.3.3 常用方法6.4 LinkedList6.4.1 基本操作6.4.2 常用方法6.5 泛型6.5.1 介绍6.5.2 基本使用6.6 比较器6.7 ArrayList和LinkedList的比较6.8 HashSet6.8.1 介绍6.8.2 常用方法6.8.3 重复数据6.…

Attetion is all you need论文阅读笔记

Attetion is all you need 参考&#xff1a;沐神&#xff08; 沐神_论文精讲_Attention is all you need&#xff09; 1、Abstract 主流的序列转录模型&#xff08;给一个序列生成另一个序列&#xff0c;比如机器翻译&#xff0c;给一句英文&#xff0c;生成一句中文&#x…

数据可视化大屏应急管理综合指挥调度系统完整案例详解(PHP-API、Echarts、百度地图)

文章目录项目说明一、项目说明单位信息数据库字段&#xff1a;资源数据库字段项目需求二、项目开发1.项目分析2.引入库3.项目开发&#xff08;1&#xff09;地图容器构建&#xff08;2&#xff09;筛选和返回按钮事件&#xff08;3&#xff09;企业筛选功能&#xff08;4&#…

【java】stream流

文章目录体验stream流stream流的生成方式Stream流的常见中间操作方法Stream流的常见中间操作方法Stream流的常见终结操作方法Stream流的练习Stream流的收集操作体验stream流 package heima.stream流;import java.util.ArrayList;public class P1 {public static void main(Stri…

node.js+uni计算机毕设项目基于微信小程序的肉鸡养殖管理平台LW(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

第二十四章 数论——质数(2)(详细讲解质数的筛选原理和证明!!)

第二十四章 数论——质数的筛选一、朴素筛法——埃氏筛法1、问题描述2、算法思路3、代码实现二、线性筛法——欧拉筛1、朴素筛法的弊端2、欧拉筛&#xff08;1&#xff09;算法思路&#xff08;2&#xff09;代码实现一、朴素筛法——埃氏筛法 1、问题描述 2、算法思路 我们从…

【折腾服务器 2】妖板 Intel N5105 + i226 主板安装 群晖、直通 SATA 控制器 教程

Catch UP 前期回顾&#xff0c;我在这台使用 N5105 和 Intel 226V 2.5G 网卡的电脑上安装了 ESXi 7.0 系统。文章在博客里有&#xff0c;可以去翻翻。 Chapter 1 网络环境准备 登录 VMWare ESXi&#xff0c;点击左侧的网络。 点击 虚拟交换机 有一个 vSwitch 0 这个是默认的&a…

抽象类与接口(Java系列6)

目录 前言&#xff1a; 1.抽象类 1.1抽象类的概念及语法 1.2 抽象类的特征 1.3抽象类的特性 2.接口 2.1接口的概念及语法 2.2接口的使用及特性 2.2.1接口的使用 2.2.2接口的特性 2.3实现多个接口 2.4接口的继承 3.抽象类与接口的区别 结束语&#xff1a; 前言&…

分布式理论之分布式选举

写在前面 一个国家需要领导人制定各种国家决策&#xff0c;一个军队也需要最高统领来制定各种军事决策&#xff0c;同理&#xff0c;一个分布式集群也需要一个领导&#xff0c;来协调整个集群的事务&#xff0c;比如保证数据一致性(这也是最重要的&#xff01;)&#xff0c;分…

uni-app学习总结

本文以B站黑马教程的uni-app项目实战视频为载体&#xff0c;总结uni-app相关用法&#xff0c;如有误&#xff0c;请指出~ 一、创建项目&#xff1a; HbuilderX工具-->文件-->新建-->项目---》选择uni--app项目&#xff0c;创建。 二、项目初始化&#xff1a; 去掉一…

设计模式之结构型模式:适配器模式

前言 前面讲解完了设计模式中的创建性模式&#xff0c;本文开始讲解设计模式中的结构性模式之一&#xff1a;适配器模式。 一、适配器模式的是干什么的&#xff1f; A类想要使用B类中的某些方法&#xff0c;但是不能直接使用&#xff0c;需要一个中间类对B类进行处理后&…

C++的类型转换

目录C语言中的类型转换为什么C需要四种类型转换C强制类型转换static_castreinterpret_castconst_castdynamic_castC语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或者返回值类型与接收返回值类型不…

【Linux】第七部分 Linux中系统管理

【Linux】第七部分 Linux中系统管理 文章目录【Linux】第七部分 Linux中系统管理7. Linux中系统管理7.1 进程和服务7.2 service 服务管理systemctl 基本语法systemctl设置后台服务的自启动配置关机重启命令总结7. Linux中系统管理 7.1 进程和服务 一个正在执行的程序或命令&a…

2023年快到了,就简单用python写个对联吧

人生苦短 我用python 我知道现在离过年还早~ 但是早点准备早点轻松~ Python写对联挺火的&#xff0c;但是代码又不是人人都用&#xff0c;那就直接写个界面打包一下呗~ 主要实现只要运行后输入上联下联、横批&#xff0c;然后自动生成春联保存在代码文件夹&#xff0c;如果…

梦想SkyPython IDLE入门

IDLE是Python软件包自带的一个集成开发环境&#xff0c;初学者可以利用它方便地创建、运行、测试和调试Python程序。 一、IDLE的安装 实际上&#xff0c;IDLE是跟Python一起安装的&#xff0c;不过要确保安装时选中了“Tcl/Tk”组件&#xff0c;准确地说&#xff0c;应该是不要…

六、应用层(一)网络应用模型

目录 1.1 客户/服务器模型 1.2 P2P模型 应用层是计算机网络体系结构的最顶层&#xff0c;是设计和建立计算机网络的最终目的&#xff0c;也是计算机网络中发展最快的部分。 早期基于文本的应用&#xff08;电子邮件、远程登陆、文件传输、新闻组&#xff09;20世纪90年代将…

node.js+uni计算机毕设项目基于微信小程序的培训机构管理系统小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

六、应用层(二)域名系统(DNS)

目录 2.1层次域名空间 2.2域名服务器 2.3域名解析过程 域名系统&#xff08;Domain Name System,DNS&#xff09;是因特网使用的命名系统&#xff0c;用来把便于人们记忆的具有特定含义的主机名转换为便于机器处理的IP地址。 多台主机可以映射到同一个域名上&#xff08;如负…

智慧工地车辆冲洗系统 工地渣土车未冲洗自动抓拍 yolo

智慧工地车辆冲洗系统 工地渣土车未冲洗自动抓拍 通过Python基于YOLOv7深度学习网络对现场画面实时监测分析。当识别到现场车辆冲洗不干净或者没有冲洗&#xff0c;系统就立即抓拍。与C / C等语言相比&#xff0c;Python速度较慢。也就是说&#xff0c;Python可以使用C / C轻松…