0876. Middle of the Linked List

876. Middle of the Linked List #

Problem #

Given a non-empty, singly linked list with head node head, return a middle node of linked list.

If there are two middle nodes, return the second middle node.

Example 1:


Input: [1,2,3,4,5]
Output: Node 3 from this list (Serialization: [3,4,5])
The returned node has value 3.  (The judge's serialization of this node is [3,4,5]).
Note that we returned a ListNode object ans, such that:
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, and ans.next.next.next = NULL.

Example 2:


Input: [1,2,3,4,5,6]
Output: Node 4 from this list (Serialization: [4,5,6])
Since the list has two middle nodes with values 3 and 4, we return the second one.

Note:

  • The number of nodes in the given list will be between 1 and 100.

Summary #

Output the middle node of the linked list. This problem has appeared many times in previous problems.

If the length of the linked list is odd, the middle node to output is the middle node. If the length of the linked list is even, the middle node to output is the node after the median.

Solution Approach #

There is a very simple approach to this problem: use 2 pointers and traverse only once to find the middle node. One pointer moves 2 steps each time, and the other pointer moves 1 step each time. When the fast pointer reaches the end, the slow pointer is the middle node.

Code #


package leetcode

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */

func middleNode(head *ListNode) *ListNode {
	if head == nil || head.Next == nil {
		return head
	}
	p1 := head
	p2 := head
	for p2.Next != nil && p2.Next.Next != nil {
		p1 = p1.Next
		p2 = p2.Next.Next
	}
	length := 0
	cur := head
	for cur != nil {
		length++
		cur = cur.Next
	}
	if length%2 == 0 {
		return p1.Next
	}
	return p1
}


Calendar Jun 25, 2026
Edit Edit this page
Total visits:   You are visitor No.
中文