当前位置: 首页 > article >正文

Leetcode刷题

力扣经典算法题之——链表反转

题目如下:

在这里插入图片描述
题目初始代码:
在这里插入图片描述
我们首先通过题目的初始代码来分析一下:

题目首先给了我们一个结构体

写过链表的家人们都知道 val 是数据域,next是指针域,记录着下一个节点的地址

题目中还给了我们一个结构体类型的函数,所以我们题目的最后是要返回一个结构体指针的——首节点!!

初始代码分析完了,现在我们来分析题目

首先呢,我们的链表分为带头节点和不带头节点两种!!

这道题呢就是典型的不带头节点的类型

通过题目的示例,我们直接也可以看到,就是普普通通的反转,很容易理解

下来我们来分析一下代码具体应该怎们写,理一理思路

最简单也是最容易想到的就是创建一个新的链表,然后通过头插的方法来完成这个题目

话不多说上图!

在这里插入图片描述
初始就是这样滴,我们创建了一个新的链表,将其的首节点设置为空,命名其为newnode.

下一步就要开始头插了,我们来看图理解一下:

在这里插入图片描述

我们需要将原链表的首节点头插到新链表上,但是!!!如果我们这样做了,那么就要断开 head 和 head->next 的链接,我们就找不到head->next的位置了,那么我们该怎们办呢?

上图!!!

在这里插入图片描述
这样就不会出现找不到的情况了

看似完美,我们来写一下代码

 typedef struct ListNode ListNod; 
struct ListNode* reverseList(struct ListNode* head) {
    ListNod* newhead=NULL;
    ListNod* pcur=head;

    ListNod* temp=pcur->next;
    pcur->next=newhead;
    newhead=pcur;
}

差不多是这样,这里我们使用了中间变量temp来记录pcur->next,方便我们使用,在我们头插之后,将头插过来的新元素设置为新链表的头节点。(注意:这里我使用了tyedef对结构体重命名,方便使用)

逻辑是这样没错,下来我们加一个循环遍历链表就好啦,循环条件我们应该以pcur为不为空来判断,如果为空,那就是遍历完了

代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
 typedef struct ListNode ListNod; 
struct ListNode* reverseList(struct ListNode* head) {
    ListNod* newhead=NULL;
    ListNod* pcur=head;
    while(pcur){
    ListNod* temp=pcur->next;
    pcur->next=newhead;
    newhead=pcur;
    pcur=temp;
    }
    return newhead;
}

OK啦,直接0ms!!!
在这里插入图片描述
个人感觉奥,在我们的循环开始之前可以加一个判断

  if(head==NULL)
    {
        return NULL;
    }

判读一下,如果链表为空,直接返回NULL就可以了,完全没必要继续执行下面的语句了。


http://www.kler.cn/a/386800.html

相关文章:

  • uniapp在app模式下组件传值
  • 蓝队知识浅谈(上)
  • 自由学习记录(21)
  • 力扣662:二叉树的最大宽度
  • 如何在python中模拟重载初始化函数?
  • WordPress 6.7 “Rollins”发布
  • 层出不穷的大模型产品,你怎么选?
  • 基于大语言模型的规划
  • 【Redis】缓存击穿与缓存雪崩:问题与解决方案
  • 网络原理(应用层)->HTTP
  • ArcGIS Pro SDK Addin-DAML
  • 十六 MyBatis使用PageHelper
  • 【韩老师零基础30天学会Java 】03章 变量
  • selenium大量并发连接驱动超时
  • sealos部署K8s,安装docker时master节点突然NotReady
  • # SpringCloud学习
  • 虚拟现实辅助工程技术如何加速汽车设计与制造
  • 接口类和抽象类在设计模式中的一些应用
  • 深度学习:bert模型
  • Nuxt.js 应用中的 prepare:types 事件钩子详解
  • MySQL 四类管理日志
  • 力扣(leetcode)每日一题 3255 长度为 K 的子数组的能量值 II|滑动窗口
  • 【系统架构设计师】2022年真题论文: 论软件维护方法及其应用(包括解题思路和素材)
  • 决策树(部分)
  • Ubuntu 22 安装 Apache Doris 3.0.3 笔记
  • (十五)JavaWeb后端开发——异常处理/AOP面向切面编程