首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >LeetCode:链表的中间结点_876

LeetCode:链表的中间结点_876

作者头像
Yuyy
发布2022-06-28 20:34:21
发布2022-06-28 20:34:21
5020
举报

思路

一次遍历链表,寻找中间节点。两个信息,一、要遍历完,二、遍历完时需要遍历到中间节点。所以需要两个指针,并且速度是1:2。注意题目要求中点为两个时,取后面个。

题目

给定一个头结点为 head 的非空单链表,返回链表的中间结点。

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

示例 1:

代码语言:javascript
复制
输入:[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:

代码语言:javascript
复制
输入:[1,2,3,4,5,6]
输出:此列表中的结点 4 (序列化形式:[4,5,6])
由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。

提示:

  • 给定链表的结点数介于 1 和 100 之间。

Related Topics

  • 链表
  • 双指针
  • 👍 394
  • 👎 0

代码

代码语言:javascript
复制
        public ListNode middleNode(ListNode head) {
            if (head == null) {
                return null;
            }
            ListNode slow = head;
            ListNode fast = head;
            int length = 1;
            while ((fast = fast.next) != null) {
                length++;
                if (length % 2 != 0) {
                    slow = slow.next;
                }
            }
            // 长度为偶数时,中间节点取后面个
            if (length % 2 == 0) {
                slow = slow.next;
            }
            return slow;
        }

Post Views: 159

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-9-06 1,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 思路
  • 题目
  • 代码
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档