leetcode:反转链表

题目描述

题目链接: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;
}

同样,结果也可以通过

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ResizeObserver观察元素宽度的变化

ResizeObserver观察元素宽度的变化 ResizeObserver观察元素宽度的变化 ResizeObserver观察元素宽度的变化 ResizeObserver 构造函数创建一个新的 ResizeObserver 对象,它可以用于监听 Element 内容盒或边框盒或者 SVGElement 边界尺寸的大小。查看详细说明 案例 &l…

电影:从微缩模型到AI纹理

在线工具推荐: 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 自胶片问世以来,电影制作人必须以模仿现实的方式使用纹理,让观众相信他…

Semi-Supervised Multi-Modal Learning with Balanced Spectral Decomposition

Y是所有模态的表征矩阵, ∑ i 1 d h ( λ i ) \sum_{i1}^dh(\lambda_i) ∑i1d​h(λi​) is the proposed eigenvalue-based objective function,the final similarity matrix W for the multimodal data as a block matrix 辅助信息 作者未提供代码

研究前沿| Nature:艰难梭菌引发肠道神经源性炎症的新机制

前言 艰难梭菌感染(Clostridioides difficile infection)是目前发达国家医院和社区内获得性肠道细菌感染腹泻的最主要原因之一。在美国,每年有约50万例病例和导致约29,000例死亡。艰难梭菌(C. difficile)是一种产生孢子…

力扣C++学习笔记——C++ 给vector去重

要使用std::set对std::vector进行去重操作,您可以将向量中的元素插入到集合中,因为std::set会自动去除重复元素。然后,您可以将集合中的元素重新存回向量中。以下是一个示例代码,演示如何使用std::set对std::vector进行去重&#…

Android Studio 安装及使用

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

IP地址的分包与组包:网络通信的关键技术解析

在计算机网络中,IP地址的分包与组包是网络通信过程中关键的技术环节,分别涉及将数据拆分为适当大小的包以及在接收端重新组装这些包的过程。这两个过程对于确保高效、可靠的数据传输至关重要。以下将深入探讨IP地址的分包与组包的概念、原理以及在网络通…

内置函数和消息传递API

消息传递范式 消息函数、聚合函数与更新函数 消息函数接受一个参数 edges,这是一个 EdgeBatch 的实例, 在消息传递时,它被DGL在内部生成以表示一批边。edges 有 src、 dst 和 data 共3个成员属性, 分别用于访问源节点、目标节点…

LeetCode | 19. 删除链表的倒数第 N 个结点

LeetCode | 19. 删除链表的倒数第 N 个结点 OJ链接 思路: 定义虚拟头节点dummy并初始化使其指向head然后定义快慢指针让快指针先走n步然后一起走最后删除倒数第n个节点然后释放虚拟节点dummy struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {…

论文导读 | 大语言模型与知识图谱复杂逻辑推理

前 言 大语言模型,尤其是基于思维链提示词(Chain-of Thought Prompting)[1]的方法,在多种自然语言推理任务上取得了出色的表现,但不擅长解决比示例问题更难的推理问题上。本文首先介绍复杂推理的两个分解提示词方法&a…

LaTex 使用颜色突出文中链接或引用

在导言区添加下面的LaTex语句: \usepackage[colorlinks,linkcolorblue]{hyperref}在LaTex中渲染结果如下图,公式会被渲染为蓝色,文献引用会被渲染为绿色:

Java-final

【1】修饰变量; 1.public class Test { 2. //这是一个main方法,是程序的入口: 3. public static void main(String[] args) { 4. //第1种情况: 5. //final修饰一个变量,变量的值不可以改变&#…

为何公司强调流程员工总是觉得反感?

在企业管理中,流程设计对于提高效率和降低风险至关重要。然而,很多企业在流程设计时常犯一些常见的错误,导致基层员工对流程感到烦扰,甚至产生抵触情绪。本文将通过分析一个企业的报销流程问题,探讨如何优化流程以提高…

Android自动化测试,5个必备的测试框架

Appium Appium是一个开源的移动测试工具,支持iOS和Android,它可以用来测试任何类型的移动应用(原生、网络和混合)。作为一个跨平台的工具,你可以在不同的平台上运行相同的测试。为了实现跨平台的功能,Appi…

SQLserver-快速复制一行数据到数据库并修改ID

右击表名,点击选择前1000行 在前面写插入到哪个表,并且对唯一标识字段进行重写 后面是筛选,具体复制哪条数据

Keras训练一个基本体系化的分类模型流程案例

Keras训练一个基本体系化的分类模型流程案例 import numpy as np from keras.datasets import mnist from keras.utils import np_utils # 导入keras提供的numpy工具包 from keras.models import Sequential from keras.layers import Dense from keras.optimizers impo…

day17-高速缓冲区的管理机制

1.目的 用户与磁盘进行文件交互时的流程 磁盘与高速缓冲区的关系 加深块设备驱动的理解 hash 循环链表 单链表的使用方法 2.高速缓冲区的工作流程 高速缓冲区中存储这对应的块设备驱动的数据 当从块设备中读取数据的时候,OS首先会从高速缓冲区中进行检索&#xff0…

当代职场人做分析,当然要用大数据分析工具

不管是从效率、分析的可用性以及灵活性来看,用大数据分析工具都还板上钉钉的。毕竟大数据分析工具集齐了大数据时代数据分析工具应具备的特点优势。 1、对接ERP,立得100BI报表 点击对接金蝶、用友ERP后,BI系统立即即可取数分析,…

移动云电脑:摆脱传统桎梏,助推企业数字化转型

如今,随着“云”在企业数字化转型战略中的作用日益凸显,上云是企业数字化转型第一步,已成为业界共识。尤其对于中小企业而言,数字化转型更是一种生存之道。 实际上,企业数字化转型面临很多传统桎梏。例如,数…

邮箱设置第三方登录授权码获取

以QQ邮箱为例 QQ邮箱设置——账户 开启POP3/SMTP服务——完成验证后获得授权码,保存授权码