代码随想录算法训练营day4 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、160.链表相交、142.环形链表II

ops/2024/12/1 8:54:48/

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

使用哑结点,两个指针交换时多声明几个变量,不容易出错

class Solution:def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:dummy_head = ListNode(0, head)cur = dummy_headwhile cur.next and cur.next.next:first_node = cur.nextseconde_node = cur.next.nextnext = seconde_node.nextcur.next = seconde_nodeseconde_node.next = first_nodefirst_node.next = nextcur = first_nodereturn dummy_head.next

19.删除链表的倒数第N个节点

快慢指针,题目指出删除的元素肯定在链表中,因此没有判断链表为空的情况。因为要删除倒数第n个元素的时候要指向前一个元素,所以fast先走n+1步

class Solution:def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:dummy_head = ListNode(next=head)fast = dummy_headslow = dummy_headfor _ in range(n+1):fast = fast.nextwhile fast:fast = fast.nextslow = slow.nextslow.next = slow.next.nextreturn dummy_head.next

160.链表相交

先遍历链表得到两个链表的长度,长的链表的指针先走几步,使得和短的链表长度相同,然后两个链表同时开始走,比较节点是否是同一个

class Solution:def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> Optional[ListNode]:# 求两个链表的长度lenA = 0lenB = 0curA = headAcurB = headBwhile curA:curA = curA.nextlenA += 1while curB:curB = curB.nextlenB += 1# 长的链表都设置为A,先走掉gap值if lenA < lenB:headA, headB = headB, headAlenA, lenB = lenB, lenAcurA = headAcurB = headBfor _ in range(lenA-lenB):curA = curA.next# 两个链表一起走while curA:if curA == curB:return curAcurA = curA.nextcurB = curB.nextreturn None

142.环形链表II

首先使用快慢指针判断是否有环,快指针走两步,慢指针走一步,如果能够重合说明有环

然后再找出环的位置,将从此时的位置和链表开始的位置同时走,重合的地方即为环入口的地方

class Solution:def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:slow = headfast = headwhile fast and fast.next:fast = fast.next.nextslow = slow.next# 重合说明有环if fast == slow:slow = headwhile slow != fast:slow = slow.nextfast = fast.nextreturn slowreturn None


http://www.ppmy.cn/ops/10689.html

相关文章

Matplotlib官网查阅资料

Matplotlib官网详细的地址&#xff1a; 英文文档&#xff1a;https://matplotlib.org/stable/contents.html中文文档&#xff1a;https://www.matplotlib.org.cn/ Matplotlib英文官网: 查找属性&#xff1a; 1.进入官网。 2.查找参数属性。 Matplotlib中文官网: 查找属性:…

使用阿里云试用Elasticsearch学习:sentence-transformers 包使用

环境&#xff1a;centos8&#xff0c;windows坑太多。 一、检查linux环境openssl哪个版本&#xff08;如果是OpenSSL 1.1.1k 直接跳过&#xff09; [roothecs-334217 python39]# openssl version OpenSSL 1.0.2k-fips 26 Jan 2017原因后续会出麻烦&#xff0c;遇到这种情况最…

网络IO模型 select poll epoll的区别

epoll与select、poll的对比 1. 用户态将文件描述符传入内核的方式 select&#xff1a;创建3个文件描述符集并拷贝到内核中&#xff0c;分别监听读、写、异常动作。这里受到单个进程可以打开的fd数量限制&#xff0c;默认是1024。 poll&#xff1a;将传入的struct pollfd结构…

48-PCIE转串口和并口电路设计

视频链接 PCIE转串口和并口电路设计01_哔哩哔哩_bilibili PCIe转串口和并口电路设计 1、PCIe转串并口电路设计基本介绍 2、PCIe转串口和并口的方案(京东) 2.1、PCIe转串口 2.1.1、ASIX (亚信)MCS9922-PCIe转2路RS232扩展卡 2.1.2、ASIX (亚信)MCS9900-PCIe转4路RS232扩展卡…

论文阅读:BEVBert: Multimodal Map Pre-training for Language-guided Navigation

BEVBert&#xff1a;语言引导导航的多模态地图预训练 摘要 现存的问题&#xff1a;目前大多数现有的预训练方法都采用离散的全景图来学习视觉-文本关联。这要求模型隐式关联全景图中不完整、重复的观察结果&#xff0c;这可能会损害智能体的空间理解。 本文解决方案&#xf…

web前端练习三

一.随机点名程序 1.点击点名按钮&#xff0c;名字界面随机显示&#xff0c;按钮文字由点名变为停止 2.再次点击点名按钮&#xff0c;显示当前被点名学生姓名&#xff0c;按钮文字由停止变为点名 <!DOCTYPE html> <html lang"en"> <head><meta…

大数据——Zookeeper 安装(集群)(二)

Zookeeper 补充 CountDownLatch&#xff1a;闭锁。会对线程进行计数&#xff0c;在计数归零之前&#xff0c;之前的线程会被阻塞&#xff1b;当计数归零之后&#xff0c;被阻塞的线程就会自动放开继续执行CyclicBarrier&#xff1a;栅栏。会对线程进行计数&#xff0c;在计数…

dpkg clashupdown dns缓存

alias clashup“source $HOME/my-config/clash_up.sh” alias clashdown“source $HOME/my-config/clash_down.sh” curl ipinfo.io dpkg -i&#xff1a;安装软件包&#xff1b; -r&#xff1a;删除软件包&#xff1b; -P&#xff1a;删除软件包的同时删除其配置文件&#xf…