算法-链表的中间结点

题目

LeetCode 876

给定一个带有头结点 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。

思路

链表的操作基本上都是可以套用快慢指针的思路
这道题也是,找中间节点就让慢指针一次走一格,快指针一次走两格,快指针走到头也就意味寻址结束,这时判断一下链表的基数偶数就行

关键点

快慢指针的应用

代码

package leetcode.linked;

import leetcode.ListNode;

/**
 * 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。
 * <p>
 * 如果有两个中间结点,则返回第二个中间结点。
 * <p>
 * <p>
 * 示例 1:
 * <p>
 * 输入:[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.
 * 示例 2:
 * <p>
 * 输入:[1,2,3,4,5,6]
 * 输出:此列表中的结点 4 (序列化形式:[4,5,6])
 * 由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。
 */
public class N876 {
    public ListNode middleNode(ListNode head) {
        ListNode fast = head;
        ListNode slow = head;

        while (null != fast.next && null != fast.next.next) {
            slow = slow.next;
            fast = fast.next.next;
        }

        if (null == fast.next) {
            return slow;
        }

        if (null != fast.next) {
            return slow.next;
        }

        return null;
    }

    public static void main(String[] args) {
        N876 n876 = new N876();
        int[] as = new int[]{1};
        ListNode listNode = ListNode.makeNode(as);

        ListNode result = n876.middleNode(listNode);
        ListNode.print(result);
    }


}

7 声望
3 粉丝
0 条评论
推荐阅读
Liquibase 数据库版本管理工具:3. changeSet 变更集详解
上篇文章中详细了介绍了一下changelog 文件的使用,本篇文章将详细说一下 changeSet 变更集 中的细节,以及通常的使用方式 1.变更集分类 changeSet 分为 6类: add create drop rename sql other 官方文档:[链接...

哒哒队长1阅读 4k评论 1

大数据 + VR 全景技术重塑“二手车买车场景”
行内人都知道,二手车交易的核心问题在于车况信息不透明。中国二手车交易市场制度尚不完善,长期以来缺少行业公认的车辆估值标准和车况检测标准,二手车商提供的估值和车况信息不够透明。这导致用户和车商交易双...

之家技术13阅读 12k

封面图
与RabbitMQ有关的一些知识
工作中用过一段时间的Kafka,不过主要还是RabbitMQ用的多一些。今天主要来讲讲与RabbitMQ相关的一些知识。一些基本概念,以及实际使用场景及一些注意事项。

lpe2348阅读 1.8k

封面图
Git操作不规范,战友提刀来相见!
年终奖都没了,还要扣我绩效,门都没有,哈哈。这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。问题描述小A和我在同时开发一个功能模块,他在优化之前的代码逻辑,我在开...

王中阳Go5阅读 2k评论 2

封面图
Redis 发布订阅模式:原理拆解并实现一个消息队列
“65 哥,如果你交了个漂亮小姐姐做女朋友,你会通过什么方式将这个消息广而告之给你的微信好友?““那不得拍点女朋友的美照 + 亲密照弄一个九宫格图文消息在朋友圈发布大肆宣传,暴击单身狗。”像这种 65 哥通过朋...

码哥字节6阅读 1.3k

封面图
万字详解,吃透 MongoDB!
MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常...

JavaGuide3阅读 221

封面图
NB的Github项目,看到最后一个我惊呆了!
最近看到不少好玩的、实用的 Github 项目,就来给大家推荐一把。中国制霸生成器最近在朋友圈非常火的一个小网站,可以在线标记 居住、短居、游玩、出差、路过 标记后可生成图片进行社区分享,标记过的信息会记录...

艾小仙5阅读 1.6k评论 1

7 声望
3 粉丝
宣传栏