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

示例1:
输入:[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:
输入:[1,2,3,4,5,6]
输出:此列表中的结点 4 (序列化形式:[4,5,6])
由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。

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

https://leetcode-cn.com/problems/middle-of-the-linked-list/
题目分析1
对于本题,如果是一个普通数组,我们会想到先获取数组的长度,然后返回中间值。但是链表不能直接通过下标访问对应的元素,所以对链表进行遍历,将遍历到的元素依次放入到一个数组中。

import org.junit.Test;public class demo {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; }}public ListNode middleNode(ListNode head) {//声明一个数组(链表结点数介于1~100之间)ListNode[] list = new ListNode[100];int index = 0;//将所有结点存放到数组中while(head!=null) {list[index++] = head;head = head.next;}//返回中间结点return list[index/2];}@Testpublic void test876() {ListNode six = new ListNode(6);ListNode fifth = new ListNode(5,six);ListNode fourth = new ListNode(4,fifth);ListNode third = new ListNode(3,fourth);ListNode second = new ListNode(2,third);ListNode head = new ListNode(1,second);middleNode(head);}
}

题目分析2
对于该题来说,可以使用快慢指针法,设置两个初始指向head的指针,两个指针一起遍历链表,慢指针一次走一步,快指针一次走两步,当快指针走到链表末尾时,慢指针刚好在链表中间。

import org.junit.Test;public class demo876 {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; }}public ListNode middleNode(ListNode head) {//初始化快慢指针均为headListNode slow = head;ListNode fast = head;//慢指针移动一步,快指针移动两步while(fast!=null && fast.next!=null) {slow = slow.next;fast = fast.next.next;}return slow;  }@Testpublic void test876() {ListNode six = new ListNode(6);ListNode fifth = new ListNode(5,six);ListNode fourth = new ListNode(4,fifth);ListNode third = new ListNode(3,fourth);ListNode second = new ListNode(2,third);ListNode head = new ListNode(1,second);middleNode(head);}
}

自己在做题时没有想到使用快慢指针的算法,后来看到题解中快慢指针的算法,真秀呀!

链表-链表的中间节点相关推荐

  1. 删除单链表中的重复节点(c语言版本)

    这是一道经典的面试题,下面是我的研究和举一反三,特整理如下: 分为三种情形: (1)删除有序链表的重复节点,重复节点一个都不留 (2)删除有序链表的重复节点,重复节点只留一个 (3)删除无序链表的重复 ...

  2. 编写代码,移除未排序的链表中的重复节点

    2019独角兽企业重金招聘Python工程师标准>>> 解法一:如果不得使用临时缓冲区,该怎么解决? 要想移除链表中的重复节点,我们需要设法记录有哪些是重复的.这里只需要使用到一个简 ...

  3. python删除链表中重复的节点_Java编程删除链表中重复的节点问题解决思路及源码分享...

    一. 题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 二. 例子 输入链表:1->2->3->3->4->4-&g ...

  4. 每天一道LeetCode-----将链表每k个节点逆序一次

    Swap Nodes in Pairs 原题链接 Swap Nodes in Pairs 意思是将链表每两个节点互换位置,要求不能直接改变链表的值,只能改变next指针的方式交换 其实就是遍历一遍每两 ...

  5. 面试题18: 删除链表节点:删除链表中重复的节点

    /******************************************************************* *<剑指Offer--名企面试官精讲典型编程题>C ...

  6. 【IT笔试面试题整理】删除无序链表中重复的节点

    [试题描述]定义一个函数,输入一个链表,删除无序链表中重复的节点 [参考代码] 方法一: Without a buffer, we can iterate with two pointers: &qu ...

  7. python链表中删除一个节点数据_python实现单链表中删除倒数第K个节点的方法

    本文实例为大家分享了python实现单链表中删除倒数第K个节点的具体代码,供大家参考,具体内容如下 题目: 给定一个链表,删除其中倒数第k个节点. 代码: class LinkedListAlgori ...

  8. 牛客题霸 [链表中环的入口节点] C++题解/答案

    牛客题霸 [链表中环的入口节点] C++题解/答案 题目描述 对于一个给定的链表,返回环的入口节点,如果没有环,返回null 拓展: 你能给出不利用额外空间的解法么? 题解: 判断环有个很巧妙的方法, ...

  9. 用O(1)的时间复杂度删除单链表中的某个节点

    用O(1)的时间复杂度删除单链表中的某个节点 给定链表的头指针和一个结点指针,在O(1)时间删除该结点.链表结点的定义如下: struct ListNode {int m_nKey;ListNode* ...

  10. 删除一个无头单链表的非尾节点(C语言)

    void DelNotTailNode(PSListNode pos) {PSListNode pNode = NULL;assert(pos);if (NULL == pos->pNextNo ...

最新文章

  1. 约会安排 (区间合并)毒瘤题
  2. 桥接模式、NAT模式、仅主机模式理解
  3. 面向全球用户的Teams app之夏令时篇
  4. 2021年春季学期期末统一考试 劳动与社会保障法(本) 试题
  5. 在ubuntu中为程序添加图标快捷键
  6. Oracle 制造死锁和查询死锁
  7. 利用Gitee搭建个人图床(上)
  8. jQuery学习笔记01:初试jQuery
  9. python智能机器人设计与实现_从AI模型到智能机器人:基于Python与TensorFlow
  10. 《Unix/linux编程实践教程》------重定向程序的I/O
  11. 推荐DS书籍阅读笔记
  12. 二等水准数据平差_自编单次二等水准平差计算表
  13. 【生活相关】一(坚持)
  14. Endnote_X9安装及使用教程
  15. 2017.3.5阿凡python简单爬虫尝试,奉献源码
  16. MMDetection框架入门教程(完全版)
  17. Uniapp微信小程序视频全屏播放功能极简实现法
  18. 一个花里胡哨的渐变雷达图 echarts图表
  19. EndNote X9插入参考文献的格式
  20. 链表的两种创建方法——头插法与尾插法

热门文章

  1. 【机器学习PAI实战】—— 玩转人工智能之利用GAN自动生成二次元头像...
  2. 人,最怕的就是努力了,却看不到收获。
  3. 纯CSS实现的文字效果
  4. App识别微信小程序二维码、太阳码调研
  5. 软件测试作业6:程序流程图
  6. Windows 7 Windows 8 简体中文旗舰版下载地址
  7. datetime,time计算时间差
  8. linux u盘无损分区,科技常识:linux如何无损调整分区大小
  9. 【APP 测试】APP 性能测试工具:MobileRunner 安装
  10. 三星R458笔记本使用ghost版后,无法调节亮度