【数据结构与算法 | 链表篇】力扣876

1. 力扣876 : 链表的中间节点

(1). 题

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

示例 1:

复制代码
输入:head = [1,2,3,4,5]
输出:[3,4,5]
解释:链表只有一个中间结点,值为 3 。

示例 2:

复制代码
输入:head = [1,2,3,4,5,6]
输出:[4,5,6]
解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。

提示:

  • 链表的结点数范围是 [1, 100]
  • 1 <= Node.val <= 100

(2). 思路 : 辅助数组

我发现链表的很多题目,尤其是简单题,大部分都可以用辅助数组来解决,让链表问题直接转化为数组问题.

(3). 解

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode middleNode(ListNode head) {
        if (head == null) {
            return head;
        }
        ListNode p = head;
        int count = 0;
        while (p != null) {
            count++;
            p = p.next;
        }
        int[] arr = new int[count];
        p = head;
        for (int i = 0; i < count; i++) {
            arr[i] = p.val;
            p = p.next;
        }
        p = head;
        for (int i = 0; i < count/2; i++) {
            p = p.next;
        }
        return p;
    }
}

(4). 思路2 : 快慢指针

依据快慢指针,快指针一次走两步,慢指针一次走一步.

(5). 解2

java 复制代码
class Solution {
    public ListNode middleNode(ListNode head) {
        if(head == null) {
            return null;
        }
        ListNode fast = head;
        ListNode slow = head;
        while (fast.next != null && fast.next.next != null) {
            fast = fast.next.next;
            slow = slow.next;
        }
        return fast.next == null ? slow : slow.next;
    }
}
相关推荐
lkforce几秒前
MiniMind学习笔记(零)--基础概念
人工智能·算法·机器学习·token·分词器·minimind·词汇表
6Hzlia1 分钟前
【Hot 100 刷题计划】 LeetCode 94. 二叉树的中序遍历 | C++ 递归法 & 迭代法
算法
nike0good5 分钟前
The 4th Universal Cup GP of Kyoto, April 4-5, 2026 题解
算法·深度优先·图论
见叶之秋11 分钟前
【数据结构】二叉树的遍历和节点个数
数据结构
澈20738 分钟前
高效查找算法详解:从顺序到哈希
数据结构·算法·哈希算法
kobesdu1 小时前
开源3D激光SLAM算法的异同点、优劣势与适配场景总结
算法·3d·机器人·ros
ZC跨境爬虫1 小时前
3D 地球卫星轨道可视化平台开发 Day13(卫星可视化交互优化+丝滑悬停聚焦)
前端·算法·3d·json·交互
水木流年追梦1 小时前
CodeTop Top 100 热门题目(按题型分类)
算法·leetcode
Tisfy1 小时前
LeetCode 1722.执行交换操作后的最小汉明距离:连通图
算法·leetcode·dfs·题解·深度优先搜索·连通图
不知名的老吴1 小时前
案例教学:最长递增子序列问题
数据结构·算法·动态规划