【Leetcode -206.反转链表 -876.链表的中间结点】

news2024/12/23 16:17:55

Leetcode

  • Leetcode -206.反转链表
  • Leetcode-876.链表的中间结点

Leetcode -206.反转链表

题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:
输入:head = [1, 2, 3, 4, 5]
输出:[5, 4, 3, 2, 1]

示例 2:
输入:head = [1, 2]
输出:[2, 1]

示例 3:
输入:head = []
输出:[]

  1. 从尾部开始向头部反转

这个思路的图如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

代码:

		struct ListNode* reverseList(struct ListNode* head)
		{
		    //空链表返回空
		    if (head == NULL)
		    {
		        return NULL;
		    }
		
		    //定义两个结构体指针newhead,cur
		    struct ListNode* newhead = head, * cur;
		
		    //new找到链表的最后一个结点,最后返回这个结点
		    while (newhead->next)
		    {
		        newhead = newhead->next;
		    }
		    //将尾部赋给cur
		    cur = newhead;
		
		    //head是原链表的头结点,所以反转之后head的next应该是NULL,若head的next不为空循环继续
		    while (head->next)
		    {
		        //每次进来都定义一个结构体指针newtail,从头开始找
		        //直到newtail的next为cur停下
		        struct ListNode* newtail = head;
		        while (newtail->next != cur)
		        {
		            newtail = newtail->next;
		        }
		
		        //将cur的next链接上一个结点
		        cur->next = newtail;
		
		        //如果cur的前一个结点是head,将head的next指向空,即为尾部
		        if (cur->next == head)
		        {
		            head->next = NULL;
		        }
		
		        //每次循环后更新cur
		        cur = newtail;
		    }
		
		    return newhead;
		}
  1. 从头部开始反转

这个思路的图如下,prev记录上一个结点,最后也是返回prev,next是为记录下一个结点;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

		struct ListNode* reverseList(struct ListNode* head)
		{
		    struct ListNode* prev = NULL, * curr = head;
		
		    //当curr不为空循环继续
		    while (curr)
		    {
		        //next记录下一个结点
		        //prev记录上一个结点
		        struct ListNode* next = curr->next;
		        curr->next = prev;
		        prev = curr;
		        curr = next;
		    }
		
		    return prev;
		}

Leetcode-876.链表的中间结点

题目:给你单链表的头结点 head ,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。

示例 1:
输入:head = [1, 2, 3, 4, 5]
输出:[3, 4, 5]
解释:链表只有一个中间结点,值为 3 。

示例 2:
输入:head = [1, 2, 3, 4, 5, 6]
输出:[4, 5, 6]
解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。

  1. 暴力循环法

这个思路就是统计链表的长度,然后将长度除以2取商,再从头开始走取商的步数即可;

		struct ListNode* middleNode(struct ListNode* head)
		{
		    //count记录链表的长度
		    //curr用来返回
		    int count = 0;
		    struct ListNode* curr = head;
		
		    //找空指针,统计链表长度
		    while (curr)
		    {
		        curr = curr->next;
		        count++;
		    }
		
		    //让curr返回头部
		    curr = head;
		
		    //中间结点需要走的步长
		    //用循环将curr往后走就行了
		    int mid = count / 2;
		    while (mid)
		    {
		        curr = curr->next;
		        mid--;
		    }
		
		    return curr;
		}
  1. 快慢指针

这个思路的图如下:

初始化好的情况:(长度为奇数)
在这里插入图片描述
最后的结果:
在这里插入图片描述

长度为偶数:

在这里插入图片描述

结果图:

在这里插入图片描述

代码和注释:

		struct ListNode* middleNode(struct ListNode* head)
		{
		    //两个指针都从头开始
		    struct ListNode* slow = head, * fast = head;
		
		    //长度为偶数时fast为空,为奇数时fast->next为空
		    while (fast && fast->next)
		    {
		        //slow每次走一步
		        //fast每次走两步
		        slow = slow->next;
		        fast = fast->next->next;
		    }
		
		    //最后slow就是要返回的指针
		    return slow;
		}

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

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

相关文章

移动端性能优化:GPU加速、图片优化与缓存策略

在移动端开发中,性能优化是一个至关重要的环节。本文将为您介绍如何通过 GPU 加速、图片优化和缓存策略来提高移动端性能。让我们开始吧! 1. GPU 加速 在移动设备上,GPU 能够快速完成图形渲染任务。我们可以通过 CSS 属性来实现 GPU 加速&a…

单链表C语言实现 (不带头 带头两个版本)

链表就是许多节点在逻辑上串起来的数据存储方式 是通过结构体中的指针将后续的节点串联起来 typedef int SLTDataType;//数据类型 typedef struct SListNode//节点 {SLTDataType data;//存储的数据struct SListNode* next;//指向下一个节点地址的指针 }SLTNode;//结构体类型的…

机器学习材料性能预测与材料基因工程应用实战

一、背景: 传统的材料研发技术是通过实验合成表征对材料进行试错和验证,而过去的计算手段受限于算法效率,无法有效求解实际工业生产中面临的复杂问题。近几年随着大数据和人工智能介入,通过采用支持向量机、神经网络等机器学习算法训练数据集…

Vue核心 MVVM模型 数据代理

1.6.MVVM 模型 MVVM模型 M:模型 Model,data中的数据V:视图 View,模板代码VM:视图模型 ViewModel,Vue实例 观察发现 data中所有的属性,最后都出现在了vm身上vm身上所有的属性及Vue原型身上所有…

用友nc6 如果用户长时间没有任何操作,如何设置会话的失效时间?

1.web应用(新开的) NC中间件环境下的web profile和NC中间件没有关系,NC中间件只不过是个J2EE运行环境,是个Container,当你的web项目启动后,NC中间件创建web容器,其web应用的会话超时时间由你的web部署描述符&#xff…

电脑卡顿反应慢怎么办?这几招教给你!

电脑使用时间长了,电脑中的各种缓存文件也会就越来越多,这些文件的堆积会占用电脑内存从而导致电脑变得卡顿。还有在电脑中安装了许多软件,若这些软件都设置为开机自启动,这会占用大量的电脑内存,影响电脑的运行速度&a…

PMP项目管理备考资料都有哪些?

当今复杂多变的项目管理环境中,项目管理从业者在各种各样的项目环境中工作,一定会采用不同的项目方法。PMP认证试图覆盖业界所有有效的项目管理方法,PMP考试范围会覆盖预测型生命周期(即瀑布式开发模式)为代表的项目管…

什么是 MVVM?MVVM和 MVC 有什么区别?什么又是 MVP ?

目录标题 一、什么是MVVM?二、MVC是什么?三、MVVM和MVC的区别?四、什么是MVP? 一、什么是MVVM? MVVM是 Model-View-ViewModel的缩写,即模型-视图-视图模型。MVVM 是一种设计思想。 模型(Model…

PerformanceTest, monitoring command

PerformanceTest, monitoring command 1、数据库 #查看最大连接数 show variables like max_connections; #例如:查看mysql连接数 show status like Threads%; 说明: threads_cached //查看线程缓存内的线程的数量 threads_connected //查看当前打开的连接的数量(打开的…

【Linux】6、在 Linux 操作系统中安装软件

目录 一、yum 命令二、安装 wget 一、yum 命令 类似 Linux 中的应用商店 📃① yum 是 RPM 软件包管理器 ✏️ Red-Hat Package Manager 📃② yum 用于自动化安装、配置 Linux 软件(可自动解决依赖问题) 📃③ 语法&a…

面试2个月没有一个offer?阿里技术官的800页知识宝典打破你的僵局~

在经历了一波裁员浪潮后,大环境似乎有所好转,但对于面试者来说,面试愈发困难,现在面试官动不动就是底层原理,动不动就是源码分析,面试一定会抓你擅长的地方,一直问,问到你不会为止。…

MySQL之内置函数

目录 一 日期函数 主要实现的功能: 主要函数: 示例: 应用 二 字符串函数 主要实现的功能 1转换或者显示相关 2切割,插入,替换,连接,比较等功能性质的 3 其他 三 数学函数 1 运算 2 …

MySQL-运算符的使用解析

运算符的使用解析 1 运算符概述2 算数运算符3 比较运算符3.1 等于运算符&#xff08;&#xff09;3.2 安全等于运算符&#xff08;<>&#xff09;3.3 不等于运算符&#xff08;<> 或者 &#xff01;&#xff09;3.4 小于等于运算符&#xff08;<&#xff09;3.5…

Jmeter基础教程合集

环境搭建 1.安装java 8.0以上版本 2.下载jmeter并安装。安装参考网址&#xff1a;https://blog.csdn.net/wust_lh/article/details/86095924 3.打开JMeter中bin目录下面的jmeter.bat文件即可打开JMeter了&#xff0c;打开的时候会有两个窗口&#xff0c;Jmeter的命令窗口和Jme…

【数据结构】哈希表——闭散列 | 开散列(哈希桶)

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《数据结构与算法》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 哈希表 &#x1f3af;哈希&#x1f94a;直接定址法&#x1f94a;除留余数法&#x1f94a;哈…

CHAPTER 3: 《A FRAMEWORK FOR SYSTEM DESIGN INTERVIEWS》第3章 《面试系统设计框架》

CHAPTER 3: A FRAMEWORK FOR SYSTEM DESIGN INTERVIEWS 你刚刚获得了梦寐以求的理想公司的现场面试机会。招聘协调员给你发送了当天的日程安排。浏览列表&#xff0c;你会感觉很好直到你的目光落在这个面试环节——系统设计面试。 系统设计面试通常很吓人。它可以像“设计一个…

【Redis】缓存同步

【Redis】缓存同步 文章目录 【Redis】缓存同步1. 数据同步策略2. 异步通知策略3. Canal3.1 Canal客户端3.2 监听器 1. 数据同步策略 缓存数据同步的常见方式有三种&#xff1a; 设置有效期&#xff1a;给缓存设置有效期&#xff0c;到期后自动删除&#xff0c;再次查询时更新…

网络系统集成实验(四)| 系统集成路由器基本配置

目录 一、前言 二、实验目的 三、实验需求 四、实验步骤与现象 &#xff08;一&#xff09;静态路由 Step1&#xff1a;构建实验拓扑如下 Step2&#xff1a;IP地址配置如下 Step3&#xff1a;配置静态路由 Step4&#xff1a;验证 &#xff08;二&#xff09;NAT配置—…

OpenPCDet复现过程记录

0、前言 OpenPCDet项目之前我就复现过&#xff0c;一个很优秀的项目&#xff0c;这几天又需要用到这个项目&#xff0c;再次复现遇到了不少问题&#xff0c;特此记录复现的流程 1、环境准备 1.1、前置条件 以下是我安装的版本 CUDA 11.3CUDNN 8.2.1 CUDA和CUDNN安装可以参考…

Yolo v1 笔记

个人不太懂的点 1.损失函数的4与5项 【论文解读】Yolo三部曲解读——Yolov1 - 知乎 https://www.youtube.com/watch?vNkFENlEb4kM&t672s 训练阶段&#xff1a; C_i 预测值&#xff1a;由网络输出出来7*7*30中第一个bbox和第二个bbox的置信度confidence C_i^hat 标签值…