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

news2024/11/16 14:32:00


题目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步,可以添加虚拟头节点,方便计算倒数第几个节点,然后快慢指针同步走,知道满足条件

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

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

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

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

相关文章

Kivy tutorial 003: Building a full GUI

Kivy tutorial 003: Building a full GUI – Kivy Blog Central themes: Adding Widgets to one another 中心主题: 添加组件到另一个组件中 The tutorals so far have covered the very basics of a Kivy application; getting everything running, adding a Wid…

【linux】TCP交流状态变迁及一些函数调用

代码 登录 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/commit/50bb00d844b9423c9bacf44d9b06604fab941686 https://gitee.com/r77683962/linux-6.9.0/raw/50bb00d844b9423c9bacf44d9b06604fab941686/dmesg_log/kern_tcp_with_state.log 从打印的日志,…

石油化工厂为什么要用专业防爆手机?

防爆手机之所以必须使用专业设计的产品,主要是出于安全考虑,以防止在易燃易爆环境中因手机使用不当引发爆炸事故。以下几点详细解释了使用专业化工防爆手机的必要性: 本质安全设计:顶坚专业防爆手机采用了本质安全(本安…

线程版服务器实现(pthread_server)

用到的所有方法所需要的参数可以在wrap.c文件中查询&#xff0c;wrap中找不到的直接通过man手册查询 1.首先介绍一下我自己写的包裹文件&#xff0c;里面有各种在可能要用到的方法 wrap.c: #include <stdlib.h> #include <stdio.h> #include <unistd.h> #…

【IDEA】单项目多启动

IDEA 允许多次运行项目 一般来说一个项目仅允许启动一次&#xff0c;启动后它的启动按钮就会变成重启按钮&#xff0c;但是一些情况下我们可能需要启动多个客户端&#xff0c;可以用于模拟多个网络请求的发送等&#xff0c;多启动的开启方式如下&#xff1a; 2023.x 之后的版本…

常见网络攻击威胁分享

今天我来分享一下比较常见的网络攻击形式&#xff0c; ARP 欺骗攻击、CC 攻击和 DDoS 流量攻击是较为常见且危害巨大的攻击方式。 一、ARP欺骗攻击 ARP&#xff08;AddressResolutionProtocol&#xff0c;地址解析协议&#xff09;是用于将IP地址转换为MAC地址的协议。ARP欺骗…

web-原生Ajax

概念: Asynchronous JavaScript And XML&#xff0c;异步的JavaScript和XML。 作用: 数据交换:通过Ajax可以给服务器发送请求&#xff0c;并获取服务器响应的数据。 异步交互:可以在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页的技术&#xff0c;如…

秋招突击——6/20——复习{(单调队列优化)——最大子序列和,背包问题——宠物小精灵收服问题}——新作{两两交换链表中的节点}

文章目录 引言复习单调队列优化——最大子序列和思路分析实现代码参考实现 背包问题——宠物小精灵的收服问题个人实现参考实现 新作两两交换链表中的节点个人实现参考实现 删除有序数组中的重复项个人实现知识补全迭代器的访问和控制vector删除特定的元素erasevector底层删除元…

私有化地图离线部署方案之查询定位服务

私有化地图离线部署整体解决方案&#xff0c;除硬件之外&#xff0c;一般主要由基础地图服务、查询定位服务、路径规划服务和高程检索服务构成。 其中&#xff0c;查询定位服务是指地理编码与逆地理编码服务。 在《私有化地图离线部署方案之基础地图服务》一文中&#xff0c;…

Python 挖坑式填充Excel模板内容(包括页眉/SheetName/logo)

纵览 Python处理Excel的方式--解压缩方式1、导包2、对模板文件进行解压缩3、对解压缩后文件层级进行介绍4、准备需要载入的数据5、模板挖坑6、运行替换代码7、压缩文件8、生成文件9、完成代码10、可能遇到的问题 结语 Python处理Excel的方式–解压缩方式 在处理Excel中过程中&…

Origin做聚类分析并利用聚类插件绘制热力图

1.聚类分析 1.1 K均值聚类 step1、首先进行归一化&#xff0c;具体步骤如图1-1所示&#xff1a; 图1-1 操作后得到归一化值如图1-2所示&#xff1a; 图1-2 step2、执行K均值聚类分析&#xff0c;如图1-3所示&#xff0c;选中聚类列&#xff0c;接着点击“统计”—“多变量分析…

Linux—LVM与磁盘配额

目录 一、LVM 1、LVM概念 2、LVM逻辑卷核心组件 3、LVM管理命令 二、LVM操作主要命令步骤 1、添加硬盘 2、新建分区&#xff0c;并修改分区类型 3、新建物理卷&#xff08;PV&#xff09; 4、新建卷组&#xff08;VG&#xff09; 5、新建逻辑卷&#xff08;LV&#xff0…

pgsql的套接字文件不存在

问题&#xff1a;psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory 解决方式&#xff1a; 检查 postgresql.conf 文件中的 unix_socket_directories 设置&#xff0c;确保它包含 /tmp 或者你期望的目录。 重…

网站安装HTTPS证书的重要性以及如何申请

在互联网时代&#xff0c;数据安全成为了企业和个人关注的焦点。HTTPS证书作为网站安全的重要保障&#xff0c;其重要性不言而喻。下面将探讨HTTPS证书的重要性&#xff0c;并介绍如何申请HTTPS证书&#xff0c;构建一个更安全、更信任的网络环境。 一、HTTPS证书的重要性 1.…

改网络ip地址有什么用

在数字化时代&#xff0c;网络IP地址是每个网络设备和终端在互联网上的唯一标识符。然而&#xff0c;有时出于安全、隐私或网络管理的需要&#xff0c;我们可能需要更改网络IP地址。例如很多小伙伴会选择使用虎观代理IP更改电脑或手机设备上的网络IP地址&#xff0c;那么&#…

中霖教育怎么样?中霖教育好吗?

中霖教育怎么样?中霖教育好吗? 中霖教育包括师资力量、课程设置、教学方法等都是经过不断完善来制定的&#xff0c;我们拥有专业且经验丰富的师资队伍&#xff0c;在教学过程中更注重个性化教学方式&#xff0c;针对每个学员的需求和学习情况制定专属的学习计划。 无论是在…

【源码】最新源支付系统源码 V7版全开源 免授权 附搭建教程

最新源支付系统源码_V7版全开源_免授权_附详细搭建教程_站长亲测 YPay是专为个人站长打造的聚合免签系统&#xff0c;拥有卓越的性能和丰富的功能。它采用全新轻量化的界面UI&#xff0c;让您能更方便快捷地解决知识付费和运营赞助的难题。同时&#xff0c;它基于高性能的thin…

数据库三大范式是什么?你是按什么原则去建数据库表的?

引言&#xff1a;数据库设计是任何信息系统中至关重要的一环&#xff0c;它直接影响着数据管理的效率、系统的性能以及信息的完整性和安全性。在当今数字化和信息化程度不断提升的背景下&#xff0c;正确和高效的数据库设计更显得至关重要。本文旨在探讨数据库设计中的核心理论…

【编译原理】绪论

1.计算机程序语言以及编译 编译是对高级语言的翻译 源程序是句子的集合&#xff0c;树可以较好的反应句子的结构 编译程序是一种翻译程序 2.编号器在语言处理系统中的位置 可重定位&#xff1a;在内存中存放的起始位置不是固定的 加载器&#xff1a;修改可重定位地址&#x…