📜  找到给定链表的中间(1)

📅  最后修改于: 2023-12-03 15:25:50.920000             🧑  作者: Mango

找到给定链表的中间

题目描述

给定一个单向链表,编写一个函数返回该链表的中间节点,如果该链表有偶数个节点,则返回中间两个节点中的任意一个。

思路分析

为了找到给定链表的中间节点,我们可以采用"快慢指针"的方法。具体做法是:

  • 定义两个指针,一个指针slow每次移动1个节点,另一个指针fast每次移动2个节点。
  • 当fast指针到达链表末尾时,slow指针就会指向链表的中间节点。

需要注意的是,当链表节点个数为偶数时,slow指针会停留在中间两个节点的前一个,我们需要根据具体情况来返回中间节点。

代码实现

下面是用Python3实现的代码片段:

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    def middleNode(self, head: ListNode) -> ListNode:
        slow, fast = head, head
        while fast and fast.next:
            slow = slow.next
            fast = fast.next.next
        return slow
时间复杂度

上面的算法只需要对链表进行一次遍历,因此时间复杂度为O(n),其中n是链表的长度。

空间复杂度

由于我们只使用了常数级别的额外空间,因此空间复杂度为O(1)。

测试示例

下面是一些用于测试的链表:

链表1:

1 -> 2 -> 3 -> 4 -> 5

中间节点为3。

链表2:

1 -> 2 -> 3 -> 4 -> 5 -> 6

中间节点为3或4。