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

Python算法练习 10.14

leetcode 2095 删除链表的中间节点

给你一个链表的头节点 head 。删除 链表的 中间节点 ,并返回修改后的链表的头节点 head 。

长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点(下标从 0 开始),其中 ⌊x⌋ 表示小于或等于 x 的最大整数。

  • 对于 n = 1234 和 5 的情况,中间节点的下标分别是 0112 和 2 。

示例 1:

输入:head = [1,3,4,7,1,2,6]
输出:[1,3,4,1,2,6]
解释:
上图表示给出的链表。节点的下标分别标注在每个节点的下方。
由于 n = 7 ,值为 7 的节点 3 是中间节点,用红色标注。
返回结果为移除节点后的新链表。 

示例 2:

输入:head = [1,2,3,4]
输出:[1,2,4]
解释:
上图表示给出的链表。
对于 n = 4 ,值为 3 的节点 2 是中间节点,用红色标注。

示例 3:

输入:head = [2,1]
输出:[2]
解释:
上图表示给出的链表。
对于 n = 2 ,值为 1 的节点 1 是中间节点,用红色标注。
值为 2 的节点 0 是移除节点 1 后剩下的唯一一个节点。

快慢指针

class Solution(object):def deleteMiddle(self, head):""":type head: Optional[ListNode]:rtype: Optional[ListNode]"""p1 = p2 = head = ListNode(0, head)while p2.next and p2.next.next:p1, p2 = p1.next, p2.next.nextp1.next = p1.next.nextreturn head.next  

 leetcode 328 奇偶链表

给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。

第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。

请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。

你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。 

示例 1:

输入: head = [1,2,3,4,5]
输出: [1,3,5,2,4]

 创建了三个辅助指针,一个纸箱当前要排序的结点,一个指向前面已经排好序的尾结点,一个指向已排序的奇数索引最后一个结点。

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):def oddEvenList(self, head):""":type head: ListNode:rtype: ListNode"""if not head or not head.next or not head.next.next: # 表中元素小于等于2 直接返回return headtail = head.next # 表尾oddtail = head # 奇数表尾i = 3cur = head.next.next # 前两个元素直接有序,从无序的第3个元素开始while cur != None:if i % 2 != 0: # 索引奇数tail.next = cur.nextcur.next = oddtail.nextoddtail.next = curoddtail = curcur = tail.nextelse:cur = cur.nexttail = tail.nexti += 1return head

 leetcode 206 反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):def reverseList(self, head):""":type head: ListNode:rtype: ListNode"""head = ListNode(0, head)rehead = ListNode(0, None)cur = head.next# priCur = headwhile cur != None:priCur = curpriCur = priCur.nextcur.next = rehead.nextrehead.next = curcur = priCurreturn rehead.next

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

相关文章:

  • 云上攻防-云原生篇Docker安全系统内核版本漏洞CDK自动利用容器逃逸
  • C# Sqlite数据库的搭建及使用技巧
  • gerrit代码review使用基本方法
  • 网络监控与故障排除:netstat命令的使用指南
  • Blender:渲染一个简单动画
  • 一篇文章带你用动态规划解决股票购买时机问题
  • 【设计模式】使用建造者模式组装对象并加入自定义校验
  • 简单聊聊低代码
  • SystemVerilog Assertions应用指南 第一章(1.27章节 “within”运算符)
  • 2023年09月 C/C++(七级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • [Mono Depth/3DOD]单目3D检测基础
  • 【Docker 内核详解】namespace 资源隔离(三):PID namespace
  • 1600*C. Game On Leaves(博弈游戏树)
  • Apache Ant的安装
  • 考研:数学二例题--∞−∞和0⋅∞型极限
  • C++算法:图中的最短环
  • C++学习——类其实也是一种作用域
  • Seata入门系列【4】undo_log、global_table、branch_table、lock_table字段及作用详解
  • 虚幻引擎:数据表格的C++常用API
  • Java日期格式化(DateFormat类和SimpleDateFormat类)
  • centos 7 lamp owncloud
  • 屏幕亮度调节保护您的眼睛
  • CentOS Linux下CMake二进制文件安装并使用Visual Studio调试
  • ASP.net相关目录,相关配置文件和.后缀名解释
  • 一键批量转换,轻松将TS视频转为MP4视频,实现更广泛的播放和分享!
  • 【Redis】使用Java客户端操作Redis
  • BSPHP 未授权访问 信息泄露
  • Learning Sample Relationship for Exposure Correction 论文阅读笔记
  • Vue项目 -- 解决Eslint导致的console报错问题
  • uni-app 在已有的数据对象中动态添加更多的数据对象