1问题描述
题解1-数组
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def middleNode(self, head: ListNode) -> ListNode:
listnode_list=[head]
while listnode_list[-1] and listnode_list[-1].next:
listnode_list.append(listnode_list[-1].next)
return listnode_list[len(listnode_list)//2]
在这里时间复杂度是O(n)遍历的一遍,空间复杂度是 O(n)创建了一个集合
题解2-双指针
这里想着能否把空间复杂度压缩到O(1),不用集合,想出了使用两个指针的方法
class Solution:
def middleNode(self, head: ListNode) -> ListNode:
slow=fast=head
while fast and fast.next:
slow=slow.next
fast=fast.next.next
return slow