Day4: 两两交换链表中的节点 24 删除链表的倒数第N个节点 19 链表相交 02.07 环形链表II 142


题目24. 两两交换链表中的节点 - 力扣(LeetCode)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode* newhead=new ListNode(0);
        newhead->next=head;
        ListNode* prev=newhead;
        ListNode* cur=head;
        if(head==nullptr)//头为空
        {
            return head;
        }
        ListNode* next=head->next;//头不为空
        while(next!=nullptr)
        {
            ListNode* nnext=next->next;
            next->next=cur;
            cur->next=nnext;
            prev->next=next;

            prev=prev->next->next;
            cur=prev->next;
            if(cur==nullptr)
            {
                break;
            }
            next=cur->next;
        }

        return newhead->next;

    }
};

题目19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        //双指针 快慢指针
        ListNode* newhead=new ListNode(0);//虚拟头节点,链表题中要常用
        newhead->next=head;
         ListNode* slow=newhead;
         ListNode* fast=newhead;
         //快指针先走n步
         while(n-->0)
         {
            fast=fast->next;
         }
         //快慢指针同时走
         ListNode* prev=slow;
         while(fast!=nullptr)
         {
            prev=slow;
            slow=slow->next;
            fast=fast->next;
         }
        //删除指向slow的指针
        prev->next=slow->next;
        delete slow;
        return newhead->next;

    }
};

题目面试题 02.07. 链表相交 - 力扣(LeetCode)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        //求两个链表长度差值
        //移动指向较长链表的指针
        //同时移动两个链表指针,比较指针是否相等,链表相交比较的是地址相等,不是值相等
        int alen=0;
        int blen=0;
        ListNode* pa=headA;
        ListNode* pb=headB;
        while(pa!=nullptr)
        {
            pa=pa->next;
            alen++;
        }
        while(pb!=nullptr)
        {
            pb=pb->next;
            blen++;
        }
        int n=0;
        pa = headA;
        pb = headB;
        if(alen>blen)
        {
            n=alen-blen;
            while(pa!=nullptr&&n-->0)
            {
                pa=pa->next;
            }
        }else
        {
            n=blen-alen;
            while(pb!=nullptr&&n-->0)
            {
                pb=pb->next;
            }
        }
        while(pb!=nullptr)
        {
            if(pb==pa)
            {
                return pb;
            }
            pa=pa->next;
            pb=pb->next;
        }
        return nullptr;
    }
};

题目142. 环形链表 II - 力扣(LeetCode)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        //快慢指针找到相遇节点,如果能相遇代表有圈,否则没有
        //相遇节点和起始节点同时出发,找到环形链表入口
        ListNode* slow=head;
        ListNode* fast=head;
        int flag=0;//0有环 1无环
        while(fast!=nullptr&&fast->next!=nullptr)
        {
            slow=slow->next;
            fast=fast->next->next;
            if(slow==fast)
            {
                flag=1;//有环
                break;//跳出循环
            }
        }
        if(flag==0)
        {
            return nullptr;//无环
        }
        ListNode* newn=head;
        ListNode* meet=slow;//相遇点
        while(newn!=meet)
        {
            newn=newn->next;
            meet=meet->next;
        }
        return meet;
    }
};

最后

两两交换链表中的节点 24 删除链表的倒数第N个节点 19 链表相交 02.07 环形链表II 142

双指针用法 快慢指针用法

环形链表就是快慢指针判断是否有圈,以及在相遇点和起始点两个指针同步移动,相遇就是环入口

链表相交就是统计链表长度,长链表指针走链表长度之差,然后两个链表指针同步走,要是相等就相交

删除链表倒数第N个节点,快指针先走N步,可以添加虚拟头节点,方便计算倒数第几个节点,然后快慢指针同步走,知道满足条件

两两交换链表中的节点,就是典型的多指针+虚拟头节点应用,要边画图边写最合适。

注意跳出循环的条件,还有注意不要进行空指针访问,多注意

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

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

相关文章

安泰电压放大器有什么作用

电压放大器是一种电子器件,它能够将输入信号的电压增大到所需的输出电压水平。电压放大器在电子电路设计中起到了至关重要的作用,下面将详细介绍电压放大器的作用。 信号放大作用:电压放大器主要作用是放大输入信号的电压,使其具有…

全域运营系统是如何做好全平台运营?

当前,全域运营的热度持续上涨,多篇分析全域运营平台优缺点的帖子也在多个创业者交流群中风靡一时。综合来看,在众多的全域运营平台中,属后面我们说的这家全域运营平台的分析最为详尽。 其中,对于我们的全域运营平台的优…

达梦数据库(DM8)替换授权dm.key遇到的错误, lic info is different between dm.key and sysinfo.

1、报错贴图 2、报错日志提示 version info: security lic info is different between dm.key and sysinfo. 原因说明:dm.key授权与服务器的硬件环境不匹配引起的报错,如:cpu、操作系统版本有关。

2023国家最高科学技术奖薛其坤院士:科学家的幸福感来自于哪里

内容来源:量子前哨(ID:Qforepost) 文丨浪味仙 排版丨沛贤 深度好文:2000字丨8分钟阅读 6 月 24 日,2023 年度国家最高科学技术奖在京揭晓,薛其坤院士荣获中国科技界崇高荣誉,这不…

【Python可视化系列】一文教你绘制带误差线的折线图(案例+源码)

这是我的第308篇原创文章。 一、引言 在日常工作或者科研任务时,经常会通过绘制折线图研究数据的变化趋势,有时候需要在折线图的基础上绘制误差线(标准差范围),本文通过一个具体的案例教你如何实现绘制带误差线的折线…

mybatis x插件的使用教程(详细)

MyBatisX 的主要功能 代码生成: 自动生成 MyBatis 的 Mapper、XML 配置文件和实体类,大大减少手工编写代码的工作量。 智能代码补全: 提供 SQL 语句和 MyBatis 配置的智能代码补全功能,使开发者能够更快地编写代码。 代码导航&…

深度学习 —— 1.单一神经元

深度学习初级课程 1.单一神经元2.深度神经网络3.随机梯度下降法4.过拟合和欠拟合5.剪枝、批量标准化6.二分类 前言 本套课程仍为 kaggle 课程《Intro to Deep Learning》,仍按之前《机器学习》系列课程模式进行。前一系列《Keras入门教程》内容,与本系列…

<电力行业> - 《第1课:电力行业的五大四小》

1 什么是电力行业的五大四小? 我们常说的电力行业的五大四小,指的是电力行业有实力的公司,分为:较强梯队的五大集团、较弱梯队的四小豪门。 五个实力雄厚的集团,分别是: 中国华能集团公司中国大唐集团公…

Gemalto加密狗的优势

Gemalto加密狗,作为硬件加密技术的杰出代表,为软件开发商和用户提供了一种高效、安全的解决方案。这种加密狗不仅拥有卓越的加密性能,还具备易用性和可靠性,是保护软件知识产权和防止非法复制的重要工具。 一、Gemalto加密狗的核心…

玄奘取经线路矢量图分享

我们在《透过丝绸之路,看古人都走过哪些地方》一文中,为你分享过丝绸之路的矢量图数据。 现在,我们再为你分享一下玄奘取经线路的矢量图,你可以在文末查看这些数据的领取方式。 玄奘取经线路 《西游记》的故事相信大家都不陌生…

点在多边形内的判断

利用三角形相似. d e l t a L a t 1 d e l t a L a t 2 t a r g e t L o n d e l t a L o n \frac{deltaLat1}{deltaLat2} \frac{targetLon}{deltaLon} \\ deltaLat2deltaLat1​deltaLontargetLon​ t a r g e t L o n d e l t a L a t 1 d e l t a L o n d e l t a L a t…

洛谷 P10584 [蓝桥杯 2024 国 A] 数学题(整除分块+杜教筛)

题目 思路来源 登录 - Luogu Spilopelia 题解 参考了两篇洛谷题解&#xff0c;第一篇能得出这个式子&#xff0c;第二篇有比较严格的复杂度分析 结合去年蓝桥杯洛谷P9238&#xff0c;基本就能得出这题的正确做法 代码 #include<bits/stdc.h> #include<iostream&g…

中国 AGI 市场—4543 亿市场下的新机会

前言 我们正站在一个全新智能纪元的路口&#xff0c;围绕通用人工智能&#xff08;AGI&#xff09;&#xff0c;在学术界、科技界、产业界的讨论中&#xff0c;一部分 AGI 的神秘面纱已被揭开&#xff0c;但这面纱之后还有更多的未知等待着我们。 InfoQ 研究中心在此背景下&a…

示波器探头口碑性价比好的品牌有哪些推荐

示波器探头作为测试测量设备中的重要组成部分&#xff0c;市场上存在多个知名品牌。以下是一些主要的示波器探头品牌及其相关信息&#xff1a; Pintech品致&#xff1a;作为全球示波器探头第一品牌&#xff0c;Pintech品致是示波器探头技术标准倡导者&#xff0c;以及“两点浮…

【已解决】ModuleNotFoundError: No module named ‘_tkinter‘

由于网络上大多文章都是有关No module named tkinter’的问题&#xff0c;而没有实质性解决_tkinter找不到的问题。注意&#xff1a;这两个报错是不同的&#xff01;&#xff01;&#xff01; 对于No module named _tkinter问题&#xff0c;如果你使用了网络上大部分方法都不适…

利用opencv自带的Haar级联分类器模型

OpenCV自带的Haar级联分类器模型&#xff1a; haarcascade_eye.xml: 这个模型用于检测眼睛。 haarcascade_eye_tree_eyeglasses.xml: 这个模型用于检测眼镜。 haarcascade_frontalcatface.xml: 这个模型用于检测猫脸。 haarcascade_frontalcatface_extended.xml: 这个模型用…

数字化转型的难点在哪里?该如何突破?

我先把结论抛出来&#xff1a;数字化转型的难点不在于“数字化”&#xff0c;而在于“转型”。 如何理解这句话呢&#xff1f; 如果你此前做过数字化转型&#xff0c;想必也都清楚这一点&#xff0c;即&#xff1a;“数字化”解决的是生产工具的升级换代问题&#xff0c;“转…

Labview_网络流

网络流的介绍 网络流是一种易于配置、紧密集成的动态通信方法&#xff0c;用于将数据从一个应用程序传输到另一个应用程序&#xff0c;其吞吐量和延迟特性可与 TCP 相媲美。但是&#xff0c;与 TCP 不同的是&#xff0c;网络流直接支持任意数据类型的传输&#xff0c;而无需先…

若依前后端分离项目整合shardingjdbc分表(详细,分片字段订单id)

文章目录 1. 引入Maven依赖2.引入配置文件3.兼容之前的数据库源,使用现在的sharding数据库源&#xff08;shardingjdbc默认的数据源&#xff09;&#xff0c;但是配置好文件之后是没有生效的&#xff0c;需要加配置文件覆盖4. 检测是否成功5. 如何使用&#xff0c;在需要使用的…

【大数据开发语言Scala的入门教程】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…