876. 链表的中间结点

题目

思路是遍历一遍得到整个链表,讲每个 node 放进一个 list,就可以通过下标得到中间的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 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:
l = []
n = head
while n.next:
l.append(n)
n = n.next
l.append(n)
return l[len(l)//2]

#44 ms 13.7 MB

看官方解答,还有一个骚操作,通过两个速度不一样的指针,一个一次走一步,一个两次走一步,快的走到底时,慢的就在中间了。

1
2
3
4
5
6
7
8
9
10
11
12
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

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/middle-of-the-linked-list/solution/lian-biao-de-zhong-jian-jie-dian-by-leetcode-solut/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。