链表的中间结点
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
示例 1:
输入:[1,2,3,4,5]
输出:此列表中的结点 3 (序列化形式:[3,4,5])
返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。
注意,我们返回了一个 ListNode 类型的对象 ans,这样:
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = NULL.
思路+代码+注释:
public ListNode middleNode(ListNode head) {
/*
思路:遍历链表节点,使用map记录每个节点以及对应的索引index,然后通过最大index的值计算中间节点的索引值,在根据索引值在map中查找对应的节点
*/
int index=0;
Map<Integer,ListNode> map=new HashMap<>();
while (head!=null)
{
map.put(index++,head);
head=head.next;
}
index--;
int mid=0;
if (index%2==0)
{
mid=index/2;
}else {
mid=index/2+1;
}
return map.get(mid);
}