当前位置: 首页 > news >正文

数据结构与算法1: 链表

题目名称: 重排链表

链接: ​​​​​​. - 力扣(LeetCode)

介绍:本题的目标是将链表进行重新组合,如下图。

如果按照标准的解法,我们需要实现三步

1. 链表中点的获取

2. 链表的反转

3. 链表的插入

而每一步都是比较经典的链表操作。

首先,为了获取链表中点,我们可以通过快慢链表。

def getMidNode(head: ListNode)->ListNode:fast_node = headslow_node = headwhile(fast_node.next.next and slow_node.next):fast_node = fast_node.next.nextslow_node = slow_node.nextreturn slow_node

然后,我们需要进行链表的反转。

def reverseList(head: ListNode)->ListNode:prev_node = Nonecur_node = headwhile(cur_node):next_node = cur_node.nextcur_node.next = prev_nodeprev_node = cur_nodecur_node = next_nodereturn prev_node

其中需要注意的是,我们要存储prev_node, next_node; 在while循环中,我们每次需要判断cur_node, 但是更重要的是,在最后一次,cur_node必然为空,因此,最后需要返回的是prev_node.

最后,我们需要实现列表的融合。

对应的就是 A--> B  和 C--> D, 变为 A-->C --> B --> D . 为了实现这一操作, 我们每次需要对于两个链表的next node进行备份,然后再更改current node的相互关系,然后再去处理next node。

def mergeLists(headA:ListNode, headB:ListNode):curA = headAcurB = headBwhile(curA and curB):tmpA = curA.nexttmpB = curB.nextcurA.next = curBcurB.next = tmpAcurA = tmpAcurB = tmpBreturn headA

实现了这些子模块后,我们经过整合,就可以实现最后的功能。为了把两个链表进行拆分,我们需要将中间节点的next在备份之后,设定为0。

midNode = getMidNode(head)headA = headheadB = midNode.nextmidNode.next = NoneheadB = reverseList(headB)result = mergeLists(headA, headB)return result

http://www.lryc.cn/news/434603.html

相关文章:

  • 【专题】2024年8月医药行业报告合集汇总PDF分享(附原数据表)
  • 这10种人不适合干项目经理,你在其中吗?
  • IT每日英语(三)
  • 【保姆级教程】如何创建一个vitepress项目?
  • 智能头盔语音识别声控芯片,AI离线语音识别ic方案,NRK3301
  • 【STM32】CAN总线基础入门
  • STM32F1+HAL库+FreeTOTS学习10——任务相关API函数使用
  • 华为 HCIP-Datacom H12-821 题库 (14)
  • java八股!2
  • 一分钟了解统一软件开发过程RUP的那点事
  • Goby 漏洞发布|(CVE-2024-45195)Apache OFBiz /viewdatafile 代码执行漏洞【已复现】
  • js的书写位置和css的书写位置的区别?为什么要这样写?
  • Python一些可能用的到的函数系列132 ORM-sqlalchemy连clickhouse
  • 华为 HCIP-Datacom H12-821 题库 (12)
  • pointpillar部署-TensorRT实现(三)
  • Java学习中,为什么会混淆类方法和实例方法,应该怎么办?
  • 【人工智能学习笔记】4_3 深度学习基础之循环神经网络
  • 解锁生活密码,AI答案之书解决复杂难题
  • Android Radio2.0——公告监听设置(四)
  • EMR Spark-SQL性能极致优化揭秘 Native Codegen Framework
  • 【VUE】实现当前页面刷新,刷新当前页面的两个方法(如何在一个页面写一个方法提供给全局其他地方调用)(如何重复调用同一个路由实现页面的重新加载)
  • 【科研小小白】灰度化处理、阈值、反色、二值化、边缘检测;平滑;梯度计算;双阈值检测;非极大值抑制
  • 数字经济时代,零售企业如何实现以消费者为中心的数字化转型?
  • 微积分复习笔记 Calculus Volume 1 - 1.5 Exponential and Logarithmic Functions
  • 代码随想录 刷题记录-24 图论 (1)理论基础 、深搜与广搜
  • MyBatis 缓存机制详解:原理、应用与优化策略
  • 跨越技术壁垒:EasyCVR为何选择支持FMP4格式,重塑视频汇聚平台标准
  • 美团OC感想
  • 搜维尔科技:AcuMap - 针灸模拟VR训练解决方案
  • WEB渗透权限维持篇-禁用Windows事件日志