【数据结构与算法 | 链表篇】力扣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;
    }
}
相关推荐
能源系统预测和优化研究30 分钟前
创新点解读:基于非线性二次分解的Ridge-RF-XGBoost时间序列预测(附代码实现)
人工智能·深度学习·算法
执笔论英雄35 分钟前
【RL】ROLL下载模型流程
人工智能·算法·机器学习
yaoh.wang41 分钟前
力扣(LeetCode) 100: 相同的树 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
SadSunset43 分钟前
力扣题目142. 环形链表 II的解法分享,附图解
算法·leetcode·链表
Sunsets_Red1 小时前
2025 FZYZ夏令营游记
java·c语言·c++·python·算法·c#
iAkuya1 小时前
(leetcode)力扣100 19螺旋矩阵(方向数组/边界把控)
算法·leetcode·矩阵
爱编程的小吴2 小时前
【力扣练习题】热题100道【哈希】 最长连续序列
算法·leetcode·职场和发展
qq_336313932 小时前
java基础-方法引用
java·开发语言·算法
Felven2 小时前
B. Lasers
算法
饕餮怪程序猿2 小时前
订单分批算法设计与实现:基于商品相似性的智能分拣优化(C++)
开发语言·c++·算法