【数据结构与算法 | 链表篇】力扣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;
    }
}
相关推荐
土星云SaturnCloud17 小时前
HRNet-pose 算法全解析:从高分辨率网络原理到土星云 SE110S 边缘部署实战
服务器·人工智能·算法·ai·边缘计算
bksczm17 小时前
零基础面试题1
jvm·数据结构·算法
sogw-三叶草️17 小时前
LeetCode206. 反转链表
数据结构·链表
m0_7393128717 小时前
【自动驾驶与机器人技术】之惯性导航与组合导航
算法·机器人·自动驾驶
驭渊的小故事17 小时前
牛客网算法刷题笔记:哈希表、贪心与动态规划实战
笔记·算法·散列表
careathers17 小时前
【数据结构】二叉树
数据结构·算法
轩轶子18 小时前
Python CLI Todo:一次数据结构错误引发的 Bug
数据结构·python·bug
Omics Pro18 小时前
空间组学!医学代谢显微工具
数据库·人工智能·算法·机器学习·自然语言处理
Coder-magician18 小时前
《代码随想录》刷题打卡day44:图论-part02
算法·深度优先·图论
克里斯蒂亚诺更新18 小时前
理解机器学习的各种算法
人工智能·算法·机器学习