【OJ】单链表刷题

news2024/11/18 1:24:48

力扣刷题

  • 1. 反转链表(206)
    • 1.1 题目描述
    • 1.2 题目分析
      • 1.2.1 头插法
      • 1.2.2 箭头反转
    • 1.3 题目代码
      • 1.3.1 头插入
      • 1.3.2 箭头反转
  • 2.合并两个有序链表(21)
    • 2.1 题目描述
    • 2.2 题目分析
    • 2.3 题目代码

1. 反转链表(206)

1.1 题目描述

在这里插入图片描述
在这里插入图片描述

1.2 题目分析

1.2.1 头插法

要将原来的链表进行反转,很容易想到,将原来的节点取下来,然后一个一个进行头插到新链表中struct ListNode* newhead=NULL
原链表中,如果cur不为空,那么cur->next=newhead,再将newhead置为新链表的头节点。
为了方便记录原链表节点的位置,在原链表上定义一个struct ListNode* next=cur->next
在这里插入图片描述

如果cur为空,这里就需要一个新的链表,所以最后不要忘记返回新链表的头节点。
在这里插入图片描述

1.2.2 箭头反转

还有一种方法就是将这些节点的箭头反向,也就是将后一个节点的next等于前一个节点。
在这里插入图片描述
反转之后就是这样:
在这里插入图片描述
也就是说:先定义两个指针,先将n1置为空,然后n2指向头节点,再将n2->next=n1。然后继续往后走,需要记录n2后一个节点位置,再定义一个n3=head->next,只要链表不为空,就让 n2->next=n1;n1=n2;n2=n3
但是在最后一步n3可能为空,所以得加一个判断,为空就不往后执行了。
最值得注意的一点是,如果原链表为空,那么后面都不执行,所以开始得加一个判断

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

1.3 题目代码

1.3.1 头插入

struct ListNode* reverseList(struct ListNode* head){
    struct ListNode* cur=head;
    struct ListNode* newhead=NULL;
    while(cur)
    {
        struct ListNode* next=cur->next;
        cur->next=newhead;
        newhead=cur;
        
        cur=next;
       
    }
    return newhead;
}

1.3.2 箭头反转

struct ListNode* reverseList(struct ListNode* head){
    if(head==NULL)
    {
        return NULL;
    }
    struct ListNode* n1,*n2,*n3;
     n1=NULL;
     n2=head;
     n3=head->next;
     while(n2)
     {
         n2->next=n1;
         n1=n2;
         n2=n3;
         if(n3)
         {
             n3=n3->next;
         }
     }
     return n1;
}

2.合并两个有序链表(21)

2.1 题目描述

在这里插入图片描述
在这里插入图片描述

2.2 题目分析

题目要求是按照升序返回合并的原来排好序的两个链表,这里就可以用尾插,比较两个链表节点的val,对比一下,取小的进行尾插。
在这里插入图片描述

这里肯定要事先判断一下这两个链表是不是为空:如果链表1为空,就直接返回链表2。同样,链表2为空,就返回链表1。

      if(list1==NULL)
      {
          return list2;
      }
      if(list2==NULL)
      {
          return list1;
      }

在已有的链表上面经行插入比较繁琐,就直接用一个新的,最后返回排好链表的头节点就行。
只有两个链表都不为空时,再考虑是链表1节点的val与链表2的val:如果 list1->val< list2->val,还是得判断一下这个新链表里面有没有节点:没有就直接让head=tail=list1,有就实现尾插。

           if(tail==NULL)
           {
              head=tail=list1;
           }
           else
           {
              tail->next=list1;
              tail=tail->next;
            }

然后链表1继续往后走。
但是如果 list1->val< list2->val是错误的,那么链表2也是同样的:

           if (tail == NULL)
            {
                head = tail = list2;
            }
            else
            {
                tail->next = list2;
                tail = tail->next;
            }
            list2 = list2->next;

当一个链表已经排好了,如果剩下的是链表1,就直接插入

       if(list1)
       {
           tail->next=list1;
       }

如果剩下的是链表2,就直接插入:

       if(list2)
       {
           tail->next=list2;
       }

最后别忘记返回头节点。

2.3 题目代码

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){

      if(list1==NULL)
      {
          return list2;
      }
      if(list2==NULL)
      {
          return list1;
      }

       struct ListNode* head=NULL;
       struct ListNode* tail=NULL;

       while(list1&&list2)
       {
           if(list1->val<list2->val)
           {
               if(tail==NULL)
               {
                   head=tail=list1;
               }
               else
               {
                   tail->next=list1;
                   tail=tail->next;
               }
               list1=list1->next;
           }
           else
           {
               if(tail==NULL)
               {
                   head=tail=list2;
               }
               else
               {
                   tail->next=list2;
                   tail=tail->next;
               }
                list2=list2->next;
           }
       }

       if(list1)
       {
           tail->next=list1;
       }
       if(list2)
       {
           tail->next=list2;
       }
        return head;

}

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

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

相关文章

<六>Python的字符串切片及常见操作

字符串的表示 在Python里&#xff0c;可以使用一对单引号、一对双引号或者一对三个双引号、一对三个单引号表示字符串。 a "Im Tom" # 一对双引号 b Tom said:"I am Tom" # 一对单引号c Tom said:"I\m Tom" # 转义字符d Tom said:"…

nginx 一、安装与conf浅析

文章目录 一、安装nginxdocker方式安装linux方式安装Ubuntu 或 Debian 系统&#xff1a;CentOS 或 RHEL 系统&#xff1a; macOS 系统&#xff08;使用 Homebrew&#xff09;&#xff1a;Windows 系统&#xff1a; 二、nginx.conf浅析 Nginx&#xff08;发音为“engine-x”&…

有能力,但是不赚钱,往往是因为没有这三个能力!2024最适合创业的细分行业,2024最适合创业的行业

很多人非常有能力&#xff0c;在学校是学霸&#xff0c;在公司是高管&#xff0c;但是出来自己创业就不行了。觉得是自己的能力不够&#xff0c;其实不是你的能力不够&#xff0c;而是你欠缺下面这三种能力。如果你能掌握这三种能力&#xff0c;就算之前是普通人尝试创业&#…

论文阅读_InP-Based_Generic_Foundry_Platform_for_Photonic_Integrated_Circuits

InP-Based_Generic_Foundry_Platform_for_Photonic_Integrated_Circuits 时间&#xff1a;2018年 作者&#xff1a;Luc M. Augustin, Member, IEEE, Rui Santos, Erik den Haan, Steven Kleijn, Peter J. A. Thijs, Sylwester Latkowski, Senior Member, IEEE, Dan Zhao, Wei…

1月5日代码随想录完全二叉树的节点个数

222.完全二叉树的节点个数 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在…

认识CUDA

1 基本概念 1.1 什么是CUDA&#xff1f; CUDA(ComputeUnified Device Architecture)&#xff0c;是显卡厂商NVIDIA推出的运算平台。 CUDA是一种由NVIDIA推出的通用并行计算架构&#xff0c;该架构使GPU能够解决复杂的计算问题。 CUDA&#xff08;Compute Unified Device Arc…

paddlehub 文本检测使用

PaddleHub负责模型的管理、获取和预训练模型的使用。 参考&#xff1a;https://github.com/PaddlePaddle/PaddleHub/tree/develop/modules/image/text_recognition/chinese_text_detection_db_server import paddlehub as hub import cv2 # from utils import cv_show import…

如何使用Plex在Windows系统搭建个人媒体站点公网可访问

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 用手机或者平板电脑看视频&#xff0c;已经算是生活中稀松平常的场景了&#xff0c;特别是各…

开发知识点-Java网络编程-Netty

Netty P1 Netty-导学分布式网络返回 异步结果dubbo rabbitmqtest 测试案例多线程 日志 第1章_01_nio三大组件-channel-buffer网络编程 框架jdk 1.4 之后才有 nio这个 APIChannel 数据传输通道 &#xff08;双向&#xff09;Buffer 内存缓冲区 &#xff08;暂存Channel 的 数据&…

rtsp解析视频流

这里先说一下 播放rtsp 视频流&#xff0c;尽量让后端转换一下其他格式的流进行播放。因为rtsp的流需要flash支持&#xff0c;现在很多浏览器不支持flash。 先说一下这里我没有用video-player插件&#xff0c;因为它需要用flash ,在一个是我下载flash后&#xff0c;还是无法播放…

在Fiber中处理请求和响应

掌握GoLang Fiber中请求和响应管理的艺术&#xff0c;以实现高效的Web开发 在Web开发领域&#xff0c;有效地处理请求和响应是构建既用户友好又高效的Web应用的基石。该过程涉及管理传入的HTTP请求、解析数据和参数、构建适当的响应、处理不同的响应类型以及优雅地处理错误。对…

金山云升级全栈云计算体系,做人工智能时代云上“助力者”

随着云原生、AIGC、大模型等新兴技术的迅速发展&#xff0c;智能化时代开启。云计算也正全面步入3.0时代&#xff0c;即云计算和人工智能深度融合的阶段。在这个阶段&#xff0c;人工智能技术成为云计算进一步释放潜力的核心推动力。 2024年1月4日&#xff0c;金山云举办了「云…

Unraid APP下载慢解决方法

1.首先你的APP商城能够打开 这里我已下载Jellyfin为例 使用APP查找镜像,是为了获取下面的配置模板 2.修改地址 默认的地址是 lscr.io/linuxserver/jellyfin服务器在国外,被墙了.下载具慢 我们需要把这个下载源修改成国内的 有很多国内的源,但是我觉得阿里的比较快 3.获…

MySQL——视图

目录 一.视图介绍 二.基本使用 三.视图规则和限制 一.视图介绍 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图。 二.基本使用 创…

在Jupyter笔记本中使用Python语言链在Mac上运行GPT4All

在过去的三周左右时间里&#xff0c;我一直在关注本地运行的大型语言模型&#xff08;LLM&#xff09;的疯狂开发速度&#xff0c;从llama.cpp开始&#xff0c;然后是alpaca&#xff0c;最近是&#xff08;&#xff1f;&#xff01;&#xff09;gpt4all。 在那段时间里&#x…

JRTClient打开谷歌

网站默认已经启动https访问&#xff0c;这时候JRTClient发布wss需要浏览器信任证书才能访问打印。为此在JRTClient内部发布了HTTPS服务&#xff0c;有时候浏览器信任的证书会丢失或者被清理掉&#xff0c;这时候需要手工信任下&#xff0c;当然用JRTBrowser就不用信任证书&…

Unity中Shader序列帧动画(U、V方向的走格)

文章目录 前言一、U方向的走格1、 要实现移动的效果&#xff0c;我们就会想到使用_Time2、使用floor向下取整3、把x、y缩小为原函数的 Column倍4、使用_Sequence的z控制帧动画U方向上的速度 二、U方向的走格三、最终效果1、亚丝娜2、小蓝帽3、火4、最终代码 前言 在上一篇文章…

网易数帆codewave低代码平台:页面和数据逻辑搭建

注:我本打算将页面和数据逻辑搭建分成多个文章来发布,这样流量可能会多一些。但考虑到学习的连贯性和读者使用的便利性,最终决定将这部分内容融合在一篇文章中。 1 创建页面 1.1 系统默认页面 创建应用时系统会默认创建 6 个页面,分别是: login 登录页面:开启权限控制…

【LeetCode刷题笔记】344.反转字符串

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法知识专栏&#xff1a;算法分析&#x1f525; 给大家跳段街舞感谢…

frp配置内网穿透访问家里的nas

frp配置内网穿透访问家里的nas 需求 家里局域网内有台nas&#xff0c;在去公司的路上想访问它 其内网地址为&#xff1a; http://192.168.50.8:6002 工具 1.frp版本v0.53.2 下载地址&#xff1a; https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_li…