• 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 后剩下的唯一一个节点。

    快慢指针

    1. class Solution(object):
    2. def deleteMiddle(self, head):
    3. """
    4. :type head: Optional[ListNode]
    5. :rtype: Optional[ListNode]
    6. """
    7. p1 = p2 = head = ListNode(0, head)
    8. while p2.next and p2.next.next:
    9. p1, p2 = p1.next, p2.next.next
    10. p1.next = p1.next.next
    11. return head.next

     leetcode 328 奇偶链表

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

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

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

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

    示例 1:

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

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

    1. # Definition for singly-linked list.
    2. # class ListNode(object):
    3. # def __init__(self, val=0, next=None):
    4. # self.val = val
    5. # self.next = next
    6. class Solution(object):
    7. def oddEvenList(self, head):
    8. """
    9. :type head: ListNode
    10. :rtype: ListNode
    11. """
    12. if not head or not head.next or not head.next.next: # 表中元素小于等于2 直接返回
    13. return head
    14. tail = head.next # 表尾
    15. oddtail = head # 奇数表尾
    16. i = 3
    17. cur = head.next.next # 前两个元素直接有序,从无序的第3个元素开始
    18. while cur != None:
    19. if i % 2 != 0: # 索引奇数
    20. tail.next = cur.next
    21. cur.next = oddtail.next
    22. oddtail.next = cur
    23. oddtail = cur
    24. cur = tail.next
    25. else:
    26. cur = cur.next
    27. tail = tail.next
    28. i += 1
    29. return head

     leetcode 206 反转链表

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

    示例 1:

    输入:head = [1,2,3,4,5]
    输出:[5,4,3,2,1]
    1. # Definition for singly-linked list.
    2. # class ListNode(object):
    3. # def __init__(self, val=0, next=None):
    4. # self.val = val
    5. # self.next = next
    6. class Solution(object):
    7. def reverseList(self, head):
    8. """
    9. :type head: ListNode
    10. :rtype: ListNode
    11. """
    12. head = ListNode(0, head)
    13. rehead = ListNode(0, None)
    14. cur = head.next
    15. # priCur = head
    16. while cur != None:
    17. priCur = cur
    18. priCur = priCur.next
    19. cur.next = rehead.next
    20. rehead.next = cur
    21. cur = priCur
    22. return rehead.next

  • 相关阅读:
    驱动开发:内核取ntoskrnl模块基地址
    CrossOver 24下载-CrossOver 24 for Mac下载 v24.0.0中文永久版
    什么是区块链粉尘攻击?
    提分必练!中创教育PMP全真模拟题分享来喽
    大模型的实践应用3-大模型的基础架构Transformer模型,掌握Transformer就掌握了大模型的灵魂骨架
    基于SpringBoot+Vue+uniapp的小型超市管理系统(源码+lw+部署文档+讲解等)
    漏刻有时数据可视化Echarts组件开发(26):全国地图三级热力图下钻和对接api自动调用数据开发实录
    【JavaSE】Java基础语法(二十四):时间日期类
    169. 多数元素
    Coinbase早期投资人Garry:我对比特币有充足的预见 2021-04-16
  • 原文地址:https://blog.csdn.net/Michelle209/article/details/133824642