题目描述
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
样例
输入:
[1,2,3,4,5,6]
输出:
4
思路
该题与【剑指offer】15. 链表中倒数第k个结点思路类似,由于返回的是中间结点,可以设置两个指针p1和p2,p1每次走一步,p2每次走两步。
code
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def middleNode(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head:
return head
p1 = head
p2 = head
if not p1.next:
return head
while p2.next:
p1 = p1.next
p2 = p2.next.next
if not p2 or not p2.next:
break
return p1