leetcode:反转链表

news2024/11/15 18:17:32

题目描述

题目链接:206. 反转链表 - 力扣(LeetCode)

分析题目

思路一

我们可以设计算法让整个链表掉头

定义三个代码n1,n2,n3

n1指向NULL,n2指向head,n3指向第二个结点

当n2不为NULL的时候,让n2->next反方向指向n1,然后n1,n2,n3都往后移动

当n3走到NULL的时候,会出现空指针的问题,这个时候我们给n3单独加一个判断

if(n3!=NULL),n3=n3->next

注意:我们没有交换值,而是改变了指针的指向

另外,当链表本身为空的时候,直接返回NULL,所以我们也需要加一个判断链表为空的条件

思路二

定义一个newhead指向NULL作为新链表的头,定义cur指向原链表的第一个结点,next保存第二个结点

然后将cur尾插,newhead作为新的头,cur走到原链表的第二个结点,next指向next->next

最后,当cur不为空的时候,则进入循环,为了防止next成为空指针,我们加一个判断:

if(next!=NULL),则next=next->next

同样的,当链表本身为空的时候,直接返回NULL,所以我们也需要加一个判断链表为空的条件

代码示例

代码一 

根据思路一,我们可以写出下面的代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {
    if(head==NULL)
    {
        return NULL;
    }
    struct ListNode* n1=NULL;
    struct ListNode* n2=head;
    struct ListNode* n3=n2->next;
    while(n2)
    {
        n2->next=n1;
        n1=n2;
        n2=n3;
        if(n3)
        n3=n3->next;
    }
    free(n3);
    free(n2);
    return n1;
}

结果就通过了

代码二 

根据思路二,我们可以写出下面的代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {
    if(head==NULL)
    {
        return NULL;
    }
    struct ListNode* newhead=NULL;
    struct ListNode* cur=head;
    struct ListNode* next=cur->next;
    while(cur)
    {
        cur->next=newhead;
        newhead=cur;
        cur=next;
        if(next)
        next=next->next;
    }
    free(next);
    free(cur);
    return newhead;
}

同样,结果也可以通过

以上就是解这道题的两个思路

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

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

相关文章

fastdfs-client-java-1.30 maven 打包安装

1. 进入源代码目录,打开cmd mvn clean install 或者 mvn package 问题不大的话会在同级目录target目录下生成打包后文件 2. 当前目录下cmd进行maven安装 mvn install:install-file -DgroupIdorg.csource -DartifactIdfastdfs-client-java -Dversion${version} -D…

CompletableFuture.join() vs Future.get(),开发中哪个更好

CompletableFuture和Future都是Java中的接口,用于异步编程和并发处理。 Future表示一种异步计算的结果,可以通过get()方法获取计算结果或等待计算的完成。但是,如果计算还未完成,get()方法会阻塞线程,这会影响并发性能…

虾皮台湾站点什么好卖

在如今的电商时代,越来越多的人选择通过网购来满足购物需求。而中国台湾地区作为一个充满机遇的市场,吸引了许多商家的目光。虾皮作为台湾地区最大的电商平台之一,为卖家提供了丰富的销售机会。但是,卖家们在选择什么产品来销售时…

文档明明在桌面上却不显示?5个方法轻松解决!

“我之前保存文档的时候明明选择保存在桌面,上次看的时候文件还在,但是今天打开电脑后发现我保存在桌面的文档不见了,这是为什么呢?还有机会找回我的文件吗?” 在日常使用电脑时,有些用户为了方便&#xff…

大势智慧代理商体系持续开疆拓土,全国代理火热招募中...

11月15日,武汉大势智慧科技有限公司(后简称“大势智慧”)与上海宝天信息科技有限公司(后简称“宝天信息”)金牌代理商签约授牌仪式成功举行。大势智慧副总裁周济安先生、宝天信息经理王芳女士分别作为双方签约代表出席…

virtuoso 后仿 ADE L error

ADE后仿时出现error ERROR (SFE-23): "input.scs" 299: The instance _57_D32_noxref is referencing an undefined model or subcircuit, parasitic_nwd. Either include the file containing the definition of parasitic_nwd, or define parasitic_nwd before run…

STM32定时器输入捕获测量高电平时间

STM32定时器输入捕获测量高电平时间 输入捕获测量高电平时间CuebMX配置代码部分 本篇内容要求读者对STM32通用定时器有一点理解,如有不解,请看 夜深人静学32系列15——通用定时器 输入捕获 输入捕获是STM32通用定时器的一种功能,可以捕获特定…

mysql数据库【进阶篇】

1.存储引擎 1.1 mysql的体系结构 连接层:最上层是一些客户端和链接服务,主要完成- -些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。服务层:第二层架构主要完成大多数的核心服务功…

Scrum敏捷开发培训团队和组织来说的重要性

Scrum敏捷开发培训对于团队和组织来说是至关重要的,有以下几点,大家可以参考下: 理解敏捷价值观和原则: 培训有助于团队理解敏捷方法背后的核心理念和价值观,包括个体和互动、工作软件、客户合作和响应变化。这有助于建…

解决Spring Boot应用在Kubernetes上健康检查接口返回OUT_OF_SERVICE的问题

现象 在将Spring Boot应用部署到Kubernetes上时,健康检查接口/actuator/health返回的状态为{"status":"OUT_OF_SERVICE","groups":["liveness","readiness"]},而期望的是返回正常的健康状态。值得注…

单脉冲测角-和差比幅法-方向图传播因子-函数编写

方向图传播因子-函数编写 和差比幅法单脉冲测角原理代码仿真结果参数说明 和差比幅法单脉冲测角原理 有关单脉冲测角和差比幅法的原理已经在博文单脉冲测角-和差比幅法中详细介绍了,我们在实际仿真的时候,往往需要在给定来波方向下方向图转化因子&#…

关于代码混淆,看这篇就够了

​ 代码混淆一.基本概念java的bytecode很容易通过JAD等反编译工具还原出源代码。这样势必不满足安全的定义。如何一定程度上保护需要防止被反编译的源代码呢?混淆(obfuscate)技术。注意:用obfuscate防盗版是根本不可能&#xff0c…

java 实现发送邮箱,复制即用,包含邮箱设置第三方登录授权码获取方法

application.yml spring:profiles:active: dev # active: test#邮件附件上传文件大小限制servlet:multipart:max-file-size: 50MB #单个文件大小限制max-request-size: 100MB #总文件大小限制(允许存储文件的文件夹大小)mail:default-encoding: UTF…

[uni-app] uni.showToast 一闪而过问题/设定时间无效/1秒即逝

toast一闪就消失 1.猜测频繁点击导致 – 排除 2.猜测再定时器内导致-- 排除 3.和封装的接口调用一起导致 - 是改原因 深挖发现: axios封装中, 对loading/hindloading进行了配置, 看来是 showToast 与 loading等冲突导致的 wx.hideLoading(Object object) 解决办法 再封装的…

数据结构与算法之美学习笔记:23 | 二叉树基础(上):什么样的二叉树适合用数组来存储?

目录 前言树(Tree)二叉树(Binary Tree)二叉树的遍历解答开篇 & 内容小结 前言 本节课程思维导图: 前面我们讲的都是线性表结构,栈、队列、链表等等。今天我们讲一种非线性表结构,树。问题&…

开源免费的流程设计器如何选型

大家在开发OA办公自动化、ERP、CRM、BPM、低代码平台等项目的时候,经常用到流程引擎,目前主流的开源流程引擎有activiti、flowable、camunda。这几个开源的流程引擎均基于BPMN2.0国际规范标准,其功能均比较强大,接口也很丰富。但涉…

远程数据采集继电器RTU如何应用在智能电动汽车充电桩

远程数据采集继电器(Remote Terminal Unit,RTU)在智能电动汽车充电桩中的应用,可以为充电桩系统提供更高效、安全和可靠的远程监控与控制功能。下面将详细说明RTU在智能电动汽车充电桩中的应用。 远程监控功能: RTU可以…

找不到msvcp110.dll怎么办,msvcp110.dll丢失的修复方法

您可能已经碰见过这样的情况,当您试图打开某个软件时,屏幕上突然跳出一个提示窗口,告诉您 “找不到msvcp110.dll”,“msvcp110.dll丢失”。遇到这种情况是不是让人很焦头烂额呀?别担心,接下来我就为您提供几…

NX二次开发UF_CAM_ask_clear_plane_tag 函数介绍

文章作者:里海 来源网站:里海NX二次开发3000例专栏 UF_CAM_ask_clear_plane_tag Defined in: uf_cam_planes.h int UF_CAM_ask_clear_plane_tag(tag_t object_tag, tag_t * target_tag ) overview 概述 Query the tag of a clearance plane 查询清洁…

使用低代码可视化开发平台快速搭建应用

目录 一、JNPF可视化平台介绍 二、搭建JNPF可视化平台 【表单设计】 【报表设计】 【流程设计】 【代码生成器】 三、使用JNPF可视化平台 1.前后端分离: 2.多数据源: 3.预置功能: 4.私有化部署: 四、总结 可视化低代码…