leetcode_链表 876.链表的中间节点

876.链表的中间节点

  • 给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。
  • 思路:快慢指针,创建两个指针fast和slow,fast指针每次移动两步,slow指针每次移动一步,这样当fast指针指向列表以外的值的时候(退出循环的时候),slow指针正好指向链表的中间节点。
bash 复制代码
- # 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 middleNode(self, head):
        """
        :type head: Optional[ListNode]
        :rtype: Optional[ListNode]
        """
        if not head or not head.next:
        # 若链表不存在或只有一个节点时,返回head
        	return head
        	
        fast, slow = head, head
        while fast and fast.next:
            fast = fast.next.next
            slow = slow.next
        return slow
  • 时间复杂度:O(n)
  • 空间复杂度::O(1)
  • 快慢指针的优势
    • 解决链表中常见的问题:例如找中点、判断环、回文链表等,常常用到快慢指针。
    • 高效的空间利用:只使用常数空间,避免了使用额外的空间(如栈或哈希表等)。
相关推荐
-dzk-36 分钟前
【代码随想录】LC 59.螺旋矩阵 II
c++·线性代数·算法·矩阵·模拟
风筝在晴天搁浅1 小时前
hot100 78.子集
java·算法
Jasmine_llq1 小时前
《P4587 [FJOI2016] 神秘数》
算法·倍增思想·稀疏表(st 表)·前缀和数组(解决静态区间和查询·st表核心实现高效预处理和查询·预处理优化(提前计算所需信息·快速io提升大规模数据读写效率
超级大只老咪1 小时前
快速进制转换
笔记·算法
m0_706653231 小时前
C++编译期数组操作
开发语言·c++·算法
故事和你912 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
qq_423233902 小时前
C++与Python混合编程实战
开发语言·c++·算法
TracyCoder1232 小时前
LeetCode Hot100(19/100)——206. 反转链表
算法·leetcode
m0_715575342 小时前
分布式任务调度系统
开发语言·c++·算法