📅  最后修改于: 2023-12-03 15:25:50.920000             🧑  作者: Mango
给定一个单向链表,编写一个函数返回该链表的中间节点,如果该链表有偶数个节点,则返回中间两个节点中的任意一个。
为了找到给定链表的中间节点,我们可以采用"快慢指针"的方法。具体做法是:
需要注意的是,当链表节点个数为偶数时,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。