代码随想录算法训练营第四天 |

news/2025/1/20 21:59:07/文章来源:https://www.cnblogs.com/MengyiSun/p/18238785

24. 两两交换链表中的节点
题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

解题:

关键:

  1. cur的位置在要交换的两个节点的前面
  2. 具体如何交换的操作!!
  3. while种植条件:cur的下一个和下下个都不为空,不能写反不然会空指针异常,用and不是or
  4. 同样用虚拟头节点
点击查看代码
class Solution:def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:dummyhead=ListNode(next=head)cur=dummyheadwhile cur.next and cur.next.next:tmp=cur.nexttmp1=cur.next.next.nextcur.next=cur.next.nextcur.next.next=tmptmp.next=tmp1cur=cur.next.nextreturn dummyhead.next

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

题目:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

解题:

思路:链表不知道总长度,所以要用快慢双指针的移动来找到删除的节点。
关键:

  1. fast比slow快n+1步
  2. 终止条件:fast指向Null
点击查看代码
class Solution:def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:dummyhead=ListNode(next=head)slow=dummyheadfast=dummyheadfor i in range(n+1):fast=fast.nextwhile fast:slow=slow.nextfast=fast.nextslow.next=slow.next.nextreturn dummyhead.next

面试题 02.07. 链表相交

题目:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
图示两个链表在节点 c1 开始相交:

题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。

解题:

思路:

  1. 求出两链表的长度;
  2. 确定哪个链表长,让cur1表示短链表,cur2表示长链表;
  3. 长cur2移动到和短cur1长度一样的位置处(末尾对齐),即同时移动(len2-len1)步;
  4. 用while同时向后移动cur1和cur2,如何指向同一个节点就返回节点。注意:判断句if cur1==cur2表示是否指向一个节点,而不是判断val值。
点击查看代码
class Solution:def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:lenA,lenB=0,0curA=headAwhile curA:lenA+=1curA=curA.nextcurB=headBwhile curB:lenB+=1curB=curB.nextcur1,cur2=headA,headBif lenA>lenB: #cur1短,cur2长cur1,cur2=cur2,cur1len1,len2=lenB,lenAelse:len1,len2=lenA,lenBfor i in range(len2-len1):cur2=cur2.nextwhile cur1:if cur1==cur2:return cur1else:cur1=cur1.nextcur2=cur2.nextreturn None

心得:

  1. 当在删除、交换等操作中,为了统一处理头结点和其他节点的规则时,需要使用虚拟头节点
  2. 画图理清思路很重要

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++--移动构造函数/移动赋值运算符

C++ 的移动语义C++--移动构造函数/移动赋值运算符 什么是移动语义?在C++11中,移动语义是一个重要的新特性,它可以使程序在内存管理方面更加高效,同时也提高了程序的性能它允许将一个对象的所有权从一个对象转移到另一个对象,而不需要进行数据的拷贝。 通俗理解 我有一份材…

java小记

今天学了一些计算机存储数据的原理: 文本,图片,声音等存储 编码:gb2312,Unicode,gbk等等。 数据类型相关遇到了一些问题:解决办法大概是:但是对于我来说是无效的,最后还是照着下面来:成功

第二次pta大作业的总结和反思

第二次pta大作业的总结和反思 目录 一.前言 二.题目分析 三.总结 一.前言 第二次作业说实话有点一言难尽啊,因为比较难的缘故吧,有的题甚至做了一个星期也没做完,所以blog有点无从下手,因为有很多题目是现想的,没有经过调试,不知道思路究竟对不对,可能会有一些理解上会些…

1_关于BeanFactory与ApplicationContext的联系和区别

BeanFactory与ApplicationContext 1. 容器和接口 1.1 BeanFactory与ApplicationContext的联系与区别: ConfigurableApplicationContext 是 ApplicationContext的子接口,而ApplicationContext接口又是 BeanFactory 的子接口。因此ConfigurableApplicationContext 接口简介继承…

回溯法求解TSP问题

1.readme 1>python 2>代码基于具体的实例,如有需要可自行修改问题规模为n,不再赘述 2.code 代价矩阵 999表示无穷 arc = [[999, 3, 6, 7], [5, 999, 2, 3], [6, 4, 999, 2], [3, 7, 5, 999]] city 存放除出发点0外的城市 city = [3, 2, 1] 访问标志数组 0-未访问 1-已访…

OpenGL:混合

OpenGL中,混合(Blending)通常是实现物体透明度(Transparency)的一种技术。透明就是说一个物体(或者其中的一部分)不是纯色(Solid Color)的,它的颜色是物体本身的颜色和它背后其它物体的颜色的不同强度结合。一个有色玻璃窗是一个透明的物体,玻璃有它自己的颜色,但它最终的…

下水道拾的沟槽的文章

wow天色将晚,在我看着你的眼里色彩斑斓 五月的气候合往年一样闷热,二中的晚自习太静,于是闲下来了,止不住地去向,好像又来一轮毕业的时候。小学时,谈起毕业总是很害怕的,那时觉得毕业时候一定是要大哭一场,不然就算不上毕业结果那天也如同流水一般平淡地过去了,正如过…

P3756 [CQOI2017] 老C的方块 解题报告

P3756 [CQOI2017] 老C的方块 解题报告oj:https://gxyzoj.com/d/gxyznoi/p/P266 又是网格题,考虑染色:显然可以发现,每一个不合法的图形都可以被染成黄->蓝->特殊边->绿->红,且旋转后同样满足条件 推广到整个棋盘就是:所以是否可以将颜色编号,然后按照上述方法…

[stars-one] 星念轻小说下载器

原文地址: [stars-one] 星念轻小说下载器-Stars-One的杂货小窝 一款将在线轻小说保存到本地的下载工具 软件介绍小说单卷下载 小说全卷下载(需VIP) 多线程解析和下载 下载导出为epub文件 自动更新软件使用前需要进行用户登录(邮箱注册) 采用会员订阅制,PC版和Android版共用账号…

裁剪序列Cut the Sequence

首先,我们可以先想一想朴素算法,推出DP,i表示分了几段,则可以推出$$F[i]=min_{1<=j<=i}(f[j]+max_{j+1<=k<=i}(a[k]))$$点击查看代码memset(f,0x3f,sizeof f);f[0]=0;for(int i=1;i<=n;i++){for(int j=0;j<i;j++){int tmp=0;ll sum=0;for(int k=j+1;k<…

vits-simple-api搭建

根据vits-simple-api中文文档指南自行搭建后端 以下步骤均在windows平台cpu推理搭建为例选择你的vits模型(注意是vits!不是So-Vits Bert Vits2 Gpt Vits)建议去抱脸网搜索或者b站搜素以及自己训练.在vits-simple-api的路径的model目录下新建你下载模型的名字的文件夹将模型的js…

bili-emoji自定义表情包设置

使用图床上传图片.推荐使用聚合图床,简单免费 把图片的图床链接复制到一个txt文件中,如abc.txt 将abc.txt放到koishi目录的非node_modules\koishi-plugin-emojihub-bili文件夹中,如koishi\lumia\abc.txt 在插件界面填写要触发的命令以及路径如下图所示5.使用如下图所示