代码随想录二刷day4 24.两两交换链表中的结点 19.删除链表的倒数第n个结点 链表相交(环形链表)

news2024/12/27 16:25:26

二刷复习


文章目录

  • 二刷复习
  • 24.两两交换链表中的结点
  • 19.删除链表的倒数第n个结点
  • 链表相交
    • 环形链表2


24.两两交换链表中的结点

思路还是挺简单的,在纸上画一个图就行了
在这里插入图片描述
思考的过程:
1.我会思考需要用一个指针curr还是两个指针prev和curr,思考的结果是一个curr就够了
2.我接下来会思考用不用dummy_head,思考的结果是用,方便操作头结点
3.我接下来就考虑指针是怎么指的,怎么断开,又怎么连,需要提前保存一下哪些指针
4.我接下来思考curr指针是怎么移动的以及,while怎么写。这一步我出错了,我一开始写的是 while curr.next.next: 后来报错nonetype;这一点应该属于是首先你要保证while curr.next, 就是头结点都没的情况 直接不进循环逻辑直接return dummy_head.next, 其次你再保证curr.next.next,就是只有一个头结点的情况也直接返回dummy_head。

所以循环条件是
while curr.next and curr.next
class Solution:
    def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
        dummy_head = ListNode(next=head)
        curr = dummy_head
        
        while curr.next and curr.next.next:
            tmp1 = curr.next
            tmp2 = curr.next.next.next
            curr.next = curr.next.next
            curr.next.next = tmp1
            curr.next.next.next = tmp2
            curr = curr.next.next
        return dummy_head.next

19.删除链表的倒数第n个结点

19.删除链表的倒数第n个结点

这道题的难点在于找到倒数第n个结点前一个结点的位置,之所以找不到是因为不能获知链表的长度

解法是双指针
fast先走n+1步, 然后slow再和它一起走直到fast指向None
此时slow指向的就是倒数第n+1个结点,就可以直接操作指针了

这个思路一定要记住

class Solution:
    def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
        dummy = ListNode(next=head)
        slow, fast = dummy, dummy
        while n+1:
            fast = fast.next
            n -= 1
        while fast:
            fast = fast.next
            slow = slow.next
        slow.next = slow.next.next
        return dummy.next

链表相交

链表相交

这个题的思路十分简单,

可以把一条链表完全加进一个set或者hash表(这两个底层都是一样的);然后遍历另外一支,如果发现遍历的另外一支中有出现在set里的就return 那个指针 否则就return None

class Solution:
    def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
        a = set()
        curr_a = headA
        while curr_a:
            a.add(curr_a)
            curr_a = curr_a.next
        
        curr_b = headB
        while curr_b:
            if curr_b in a: return curr_b
            else: 
                curr_b = curr_b.next
        return None

环形链表2

环形链表2
不管是环形链表2还是链表相交思路都是一样的

class Solution:
    def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:
        a = set()
        curr = head
        while curr:
            a.add(curr)
            curr = curr.next
            if curr in a: return curr
        return None

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

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

相关文章

利用 Nacos 实现了一个动态化线程池,非常实用

在后台开发中,会经常用到线程池技术,对于线程池核心参数的配置很大程度上依靠经验。然而,由于系统运行过程中存在的不确定性,我们很难一劳永逸地规划一个合理的线程池参数。在对线程池配置参数进行调整时,一般需要对服…

SegeX Automation:VC调用Golden Surfer自动化失败(VC调用Automation失败)原因详解

----哆啦刘小洋 原创,转载需说明出处 2022-12-29 SegeX Automation:Surfer自动化(Automation)失败原因1 简介2 初始化Surfer对象不成功2.1 一般代码2.1 改进代码3 Windows系统原因4 Surfer原因5 其他问题1 简介 在工程领域,Golde…

国产无线耳机什么牌子好?国产真无线蓝牙耳机排行

随着近几年蓝牙耳机市场的快速发展,蓝牙耳机依旧占据着半个行业的份额,在人们的日常生活中出现的频率也越来越高。叫得上名的国产蓝牙耳机牌子也越来越多,那么,国产无线耳机什么牌子好?下面,我来给大家推荐…

无代码资讯 | Gartner 预测明年低代码市场规模;微软推出低代码学习平台;AWS 推出开发无服务器应用的低代码平台

栏目导读:无代码资讯栏目从全球视角出发,带您了解无代码相关最新资讯。 TOP3 大事件 1、Gartner 预测到 2023 年,全球低代码市场预计达到269亿美元 根据 Gartner 的最新预测,到 2023 年全球低代码开发技术市场规模预计将达到 269…

hnu计网实验三-应用层和传输层协议分析(PacketTracer)

前言:难度适中的一个实验 一、实验目的 通过本实验,熟悉PacketTracer的使用,学习在PacketTracer中仿真分析应用层和传输层协议,进一步加深对协议工作过程的理解。 二、实验内容 研究应用层和传输层协议 从 PC 使用 URL 捕获 W…

多道程序与分时多任务--rCore[3]

概念 协作式操作系统 计算机硬件在快速发展,内存容量在逐渐增大,处理器的速度也在增加,外设 I/O 性能方面的进展不大。于是就想到,让应用在执行 I/O 操作或空闲时,可以主动 释放处理器 ,让其他应用继续执行…

Linux- 系统随你玩之--grep查找文件内容

1、前言 我们在使用过程中经常需要对当前获取的文件进行过滤、提取和分析,以便快速查找到含有指定内容的文件或指定信息的那些行。本章我们继续深入了解有关文本检索的内容。 2、grep 查找文件内容 Linux系统中grep命令是一种强大的文本搜索工具,它能…

使用Loki收集网络设备日志

新钛云服已累计为您分享716篇技术干货前言Loki是Grafana Labs团队的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统,它的设计非常简洁易于操作。受Prometheus启发的,可以水平扩展、高可用以及支持多租户的日…

S-HUB如何实现数据库对接WEBSERVICE API

近几年SAAS被大家逐步认可,越来越多的企业购买SAAS服务,但是仍然有很多自建各种业务系统,这些系统建设时一般都只考虑自身业务,而不是特别注重与别的系统之间的互联互通。而企业为了提升效率,又需要将这些业务与别的系…

Java开发 - 双向链表不可怕

前言 说起链表,那还是当初上学的时候学习的,印象里就觉得像锁链一样一环扣一环,后来工作后就几乎没实际接触过链表,每当遇到链表,总是不知道该怎么讲,因为对链表的本质一无所知。也是在学习了Java后&#…

剑指offer----C语言版----第三天

目录 1. 替换空格 1.1 题目描述 1.2 题目背景 1.3 必要的思考 1.4 思路一 1.5 思路二 1.6 思路三(学方法) 1.7 小试牛刀 1. 替换空格 原题链接:剑指 Offer 05. 替换空格 - 力扣(LeetCode)https://leetcode.cn/p…

回首2022,展望2023(年度总结)

回首2022,展望2023 热爱技术的伙计们: 哈喽,这篇文章经过一周左右的写写改改,在2022最后的工作日与大家见面,有人说总结是为了更好的开始。是的,一年的时间真的很快,马上就是2023了&#xff0…

k-mean聚类的python实现

文章目录介绍KMeans()函数介绍实例导入相关包整理数据手肘法确定分类个数创建模型绘制结果分为3类的结果作者:张双双介绍 sklearn.cluster模块提供了常用的非监督聚类算法。 该模块中每一个聚类算法都有两个变体: 一个是类(class)另一个是函数(function)。 类实现了…

day06 Debug基础练习

1.Debug模式 1.1 什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。 1.2 Debug介绍与操作流程 如何加断点 选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可 …

刷题记录:牛客NC24858Job Hunt [最长路+两种不同判环详解]

传送门:牛客 题目描述: 奶牛们正在找工作。农场主约翰知道后,鼓励奶牛们四处碰碰运气。而且他还加了一条要求:一头牛在一个城市 最多只能赚D(1≤D≤1000)美元,然后它必须到另一座城市工作。当然,它可以在…

2自由度陀螺仪滑模控制和PID控制跟踪目标轨迹

目录 前言 1.陀螺仪模型 2.滑模跟踪控制 3.PID控制 4.总结 前言 不为别的,这篇小文章只为内涵某人,问候一下他:不是有手就行,哈哈~ 1.陀螺仪模型 2.滑模跟踪控制 对于2自由度陀螺仪有两个方向x、y跟踪,所以需要…

对于软件测试认识的几大误区,看看你有没有?

对于软件开发来说,软件测试可能还不被大众了解,很多开发人员,包括很多软件高层管理人员,由于缺乏软件测试的知识和实践经验,对软件测试的认识还有很多的误区: 误区一:如果软件发布后有质量问题…

我们一起来谈谈高并发和分布式系统的幂等如何处理!

什么是幂等性 幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同。 在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。 幂等函数或幂等…

Codeforces Round #841 (Div. 2)

题目链接 A. Joey Takes Money 题目描述 input output 题意: 有一个长度为n的数组,你可以进行一步操作,选择两个i,j,然后再选择两个数x,y,使得a[i]a[j] xy,然后将a[i] x,a[j] y,问任意步操…

Spring 中运用的 9 种设计模式

Spring中涉及的设计模式总结,在面试中也会经常问道 Spring 中设计模式的问题。本文以实现方式、实质、实现原理的结构简单介绍 Sping 中应用的 9 种设计模型,具体详细的刨析会在后面的文章发布,话不多说,来个转发、在看、收藏三连…