大厂常见算法50题-反转链表

news2024/11/15 14:09:16

请添加图片描述

专栏持续更新50道算法题,都是大厂高频算法题,建议关注。

文章目录

  • 解法参考链接
  • 题目
  • 解法一 双指针
  • 解法二 递归
  • 解法三 妖魔化的双指针
  • 总结

解法参考链接

题目

image.png

解法一 双指针

  • 定义两个指针: pre 和 cur。pre 在前 cur 在后。
  • 每次让 pre的 next 指向 cur,实现一次局部反转
  • 局部反转完成之后, pre 和 cur 同时往前移动一个位置
  • 循环上述过程,直至 pre 到达链表尾部
class Solution {
    public ListNode reverseList(ListNode head) {
        // 如果初始化用这个,输出就是543210,多了一个0
        // ListNode pre = new ListNode();
        ListNode pre = null;
        ListNode cur = head;
        while (cur != null) {
            ListNode temp = cur.next;
            cur.next = pre;
            pre = cur;
            cur = temp;
        }
        return pre;
    }
}

解法二 递归

class Solution {
    public ListNode reverseList(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode ret = reverseList(head.next);
        // 两次next需要理解一下:head.next实际代表的就是最后一个节点,看方法的入参
        head.next.next = head;
        head.next = null;
        return ret;
    }
}

解法三 妖魔化的双指针

class Solution {
    public ListNode reverseList(ListNode head) {
        if (head == null) { return null; }
        ListNode cur = head;
        while (head.next != null) {
            ListNode temp = head.next.next;
            head.next.next = cur;
            cur = head.next;
            head.next = temp;
        }
        return cur;
    }
}

总结

反转链表在面试时非常高频,解法主要掌握解法一即可,要会写还要会说,面试官有时会问思路的。对于没刷过算法的建议看下文章开头的视频题解。作者K神,视频题解逐帧观看,看完自己一帧一帧画下来,可以不看视频自己画出来说明真正理解了。

请添加图片描述

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

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

相关文章

React 19 带来了 JSX 运行时的重要更新

在 React 的发展历程中,JSX 运行时一直扮演着重要的角色。在以前的的版本,JSX 运行时会克隆传入的 props 对象,这背后有着两大原因。 历史原因 React 保留了一些特殊的 prop 名称,如 key 和在 React 19 之前的 ref。这些 prop 并…

【Docker】Docker基本操作

docker 发展历史 https://www.cnblogs.com/rongba/articles/14782624.html Docker概述 Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。 Docker 的容…

指针专题(4)【qsort函数的概念和使用】

1.前言 上节我们学习了指针的相关内容,本节我们在有指针的基础的条件下学习一下指针的运用,那么废话不多说,我们正式进入今天的学习 2.回调函数 我们既然已经学习了指针的相关基础,那么我们此时就可以用指针来实现回调函数 而回…

轻松学会微信小程序开发(一)

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

Java常见面试题总结

文章目录 1. 什么是线程和进程?2. 请简要描述线程与进程的关系,区别及优缺点?3. 什么是堆和方法区?4. 并发与并行的区别5. 同步和异步的区别6.为什么要使用多线程? 优点?(重要)7. 使用多线程可能带来什么问题?8. 如…

javaWeb中的classpath

参考:https://www.cnblogs.com/StarbucksBoy/p/11375475.html 日常开发过程中的项目目录结构 打包后的war包,解压缩后的目录结构 打包前后文件的映射关系如下:

ElasticSearch查询时修改打分

原生的ES打分基于BM25算法,相比于TF-IDF已经有了较大的改进,但是在实际场景中往往最终的排序效果还是需要进行调整。由于直接修改索引的权重往往代价较大,比较经济的方式还是在查询时即时修改得分以实现排序控制。 注:案例测试数据…

MO DOCKER - Docker synopsis - Huge

Docker synopsis website addressDocker series2.1 今日课程介绍2.2 初始docker - 什么是docker website address url address Docker series 2.1 今日课程介绍 2.2 初始docker - 什么是docker 项目部署的问题 大型项目组件较多, 运行环境也较为复杂,部署时会碰到一些问题…

VR MR AR 的区别

VR(Virtual Reality)、MR(Mixed Reality)和AR(Augmented Reality)是三种不同的沉浸式技术,它们各自在交互方式、信息呈现和环境感知方面有着显著的区别。 以下是这三种技术的详细对比: VR (Virtual Reality) 虚拟现实 定义与特点: 完全沉浸:VR技术通过头戴式显示器…

keil创建单片机工程

一、创建工程 打开Keil uVision4,依次选择 Project—>New uVision4 Project,选择工程保存路径及填写工程名称,如下图 然后点“保存”。在Select a CPU Data Base File中选择"STC MCU Database",点 "OK"&am…

Linux/Usage

Usage Enumeration nmap 首先使用 nmap 默认配置扫描系统端口对外开放情况,发现对外开放了 22 和 80 端口,然后又扫描了这两个端口的详细信息,情况如下 ┌──(kali㉿kali)-[~/vegetable/HTB/Usage] └─$ nmap -sC -sV -p 22,80 -oA nmap…

Spring的过滤器、拦截器、切面区别及案例分析

Spring的过滤器、拦截器、切面 三者的区别,以及对应案例分析 一、三者的实现方式 1.1 过滤器 xxxFilter 过滤器的配置比较简单,直接实现Filter接口即可,也可以通过WebFilter注解实现对特定URL的拦截,Filter接口中定义了三个方法…

选择ERP系统需要考虑哪些因素 企业ERP系统选型指南

ERP系统是一个复杂的软件系统,中小企业要建成ERP系统首先是要选择一个适合自己的ERP软件。目前市场上的ERP软件品种繁多,功能各异,那么中小企业应如何结合自己的实际情况“量体裁衣”找到最适合自己的ERP软件呢?这是目前中小企业进行ERP选型…

Axure糖尿病健康管理APP原型 (知识科普/病友社区/远程医生会诊/购物商城/血糖监测/饮食监测)

作品概况 页面数量:共 50 页 源文件格式:rp格式,兼容 Axure RP 9/10,非程序软件无源代码 应用领域:医疗健康、慢病管理、糖尿病管理 作品特色 本作品为Axure糖尿病健康管理APP端原型图,设计规范内容清晰…

一款新型的Linux服务器管理工具

最近发现了一款新型的Linux服务器管理工具,名称叫1Panel,本文跟大伙分享一下。 一. 产品介绍 1Panel 是一个开源的 Linux 服务器运维管理面板,具有丰富的功能,可对服务器和容器进行管理。 产品提供简洁直观的We图形界面&#x…

HTML随机点名程序

案例要求 1.点击点名按钮&#xff0c;名字界面随机显示&#xff0c;按钮文字由点名变为停止 2.再次点击点名按钮&#xff0c;显示当前被点名学生姓名&#xff0c;按钮文字由停止变为点名 案例源码 <!DOCTYPE html> <html lang"en"> <head> <m…

数据结构实验(二)

单链表的基本操作 一、总的设计思路(c++实现) 1、首先定义一个包含name、gender、student_number、hobbies的学生信息结构体。 2、接着一一写出:链表初始化(initialize)函数、后插法插入(insert)函数、打印信息(output)函数、对链表结点进行排序(sortList)函数、…

【前后端】django前后端交互

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、django是什么二、django前后端交互指引三、总结 前言 随着开发语言及人工智能工具的普及&#xff0c;使得越来越多的人会主动学习使用一些开发语言&#x…

质量精美的UI设计素材库:3000+图标设计资源免费下载!

作为一名设计师&#xff0c;你的设计灵感来自哪里&#xff1f;想象一下吗&#xff1f;事实上&#xff0c;材料库仍然是大多数设计师必不可少的东西&#xff0c;如果你能更方便地找到他们可用的设计材料&#xff0c;那么在创作中&#xff0c;无疑可以用一半的努力得到两倍的结果…

Qt绘制边框有阴影兼容性问题

在Qt开发过程中&#xff0c;有时候我们要显示一个有阴影的对话框&#xff0c;这时一般采用自定义实现&#xff0c;然而最近在开发时软件时&#xff0c;Win11上显示正常&#xff0c;Win10或其他Win11电脑显示不正常&#xff0c;存在兼容性问题吗&#xff1f; 下面是具体的源码 …