876. 链表的中间结点

1、题目描述

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

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

2、java编程语言实现

2.1、常规做法

public static ListNode middleNode(ListNode head) {

if(head == null) return null;

//定义辅助指针

ListNode pCurrent = head;

//获取链表的长度

int count = 0;

while(pCurrent != null) {

count++;

pCurrent = pCurrent.next;

}

pCurrent = head;

//如果是奇数

for(int i = 2;i <= count/2 + 1;i++ ) {

pCurrent = pCurrent.next;

}

return pCurrent;

}

测试结果:

2.2、快慢指针做法

public static ListNode middleNode(ListNode head) {

if(head == null) return null;

//定义快慢指针

ListNode p1 = head; //快指针

ListNode p2 = head; //慢指针

//1-2-3-4-5

//p1走两步,p2走一步

while(p2 != null && p2.next != null) {

p1 = p1.next;

p2 = p2.next.next;

}

return p1;

}

测试结果:

3、C语言实现

3.1、常规做法

struct ListNode* middleNode(struct ListNode* head){

if(head == NULL) return NULL;

//定义辅助指针

struct ListNode* pCurrent = head;

//获取链表的长度

int count = 0;

while(pCurrent != NULL) {

count++;

pCurrent = pCurrent->next;

}

pCurrent = head;

//如果是奇数

for(int i = 2;i <= count/2 + 1;i++ ) {

pCurrent = pCurrent->next;

}

return pCurrent;

}

测试结果:

3.2、快慢指针做法

struct ListNode* middleNode(struct ListNode* head){

if(head == NULL) return NULL;

//定义快慢指针

struct ListNode* p1 = head; //快指针

struct ListNode* p2 = head; //慢指针

//1-2-3-4-5

//p1走两步,p2走一步

while(p2 != NULL && p2->next != NULL) {

p1 = p1->next;

p2 = p2->next->next;

}

return p1;

}

测试结果:

java返回链表的中间结点_876. 链表的中间结点相关推荐

  1. java单链表查询功能,Java 实现简答的单链表的功能

    作者:林子木  博客网址:http://blog.csdn.net/wolinxuebin 參考网址:http://blog.csdn.net/sunsaigang/article/details/5 ...

  2. java数据结构与算法之双链表设计与实现

    转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/53047590 出自[zejian的博客] 关联文章: java数据结 ...

  3. Java数据结构与算法-SingleLinkedList单向链表插入,删除,查找,修改详解及代码

    SingleLinkedList单向链表插入,删除,查找,修改详解及代码 单向链表学习目标 1. 链表的介绍 2. 单向链表的存储特点以及原理 3. 基本操作:插入,删除等 4. 单向链表应用场景举例 ...

  4. 【Java】环形链表 ( 给定一个链表,判断链表中是否有环)

    题目描述 :给你一个链表的头节点 head ,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,评测系统内部使用整数 po ...

  5. Java单链表、双端链表、有序链表实现

    Java单链表.双端链表.有序链表实现 原创 2014年03月31日 23:45:35 标签: Java / 单链表 / 双端链表 / 有序链表 65040 单链表: insertFirst:在表头插 ...

  6. Java二叉搜索树转循环链表,关于java:二叉搜索树转换为单向链表interview1712

    题目形容 二叉树数据结构TreeNode可用来示意单向链表(其中left置空,right为下一个链表节点).实现一个办法,把二叉搜寻树转换为单向链表,要求仍然合乎二叉搜寻树的性质,转换操作应是旧址的, ...

  7. TypeScript算法专题 - blog9 - 单链表统计 : 返回指定值在单链表结点中的出现次数

    TypeScript数据结构与算法专题 - [单链表9] 单链表统计 : 返回指定值在单链表结点中的出现次数 李俊才 CSDN:jcLee95 邮箱:291148484@163.com 专题目录:ht ...

  8. 判断两个无环单向链表/有环单向链表是否相交,并返回相交节点

    题目描述:单链表可能有环,也可能无环.给定两个单链表的头节点 head1 和 head2, 这两个链表可能相交,也可能不相交.请实现一个函数,如果两个链表相交,请返回相交 的第一个节点;如果不相交,返 ...

  9. 【JAVA】PAT 乙级 1025 反转链表(测试点5超时,牛客网通过)

    [JAVA]PAT 乙级 1025 反转链表(测试点5超时,牛客网通过) 题目链接 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5 ...

最新文章

  1. raise IOError('The file is not exist!')
  2. prefuse学习(二)显示一张图
  3. leetcode209. 长度最小的子数组(暴力+滑动窗口)
  4. ExtJs CheckboxSelectionModel 全选操作后 清空表格头的checkBox
  5. Java-控制台接受用户输入数据的方法
  6. django系列8.3--django中间件实现登录验证(1)
  7. NUC1305 哥德巴赫猜想【筛选法】
  8. 请教各位前辈一个问题。
  9. java模拟form表单提交图片文件
  10. 基于nvidia的ffmpeg编解码加速
  11. 固高运动控制卡原点回零函数
  12. appium ios端自动化测试配置
  13. 萤石云视频Android SDK接口使用说明
  14. windos找不到文件:打开fla文件时候报错!
  15. win2008 r2 配置程序office访问权限
  16. 猫学习IOS(四)UI半小时就搞定Tom猫
  17. LocalSolver-全领域、超大规模混合变量数学规划介绍
  18. android swf 播放器代码,Android Flash swf播放器源码(2019)
  19. 结构光资料 | 分享几个结构光方向研究者的主页
  20. 代码实践:基于LSTM网络的DEAP情感数据集情感分类

热门文章

  1. 2017.5.9 积木大赛 思考记录
  2. 输入长度_CAD怎么测量长度?
  3. 【英语学习】【WOTD】ratiocination 释义/词源/示例
  4. unique去除重复的向量_R语言向量与因子
  5. 室内定位程序_基于增强现实的室内导航系统如何设计架构
  6. VS2010平台下OpenCV编译和安装
  7. EPIC《禅意花园》项目开放下载
  8. 如何在 ES5 环境下实现一个const ?
  9. NumPy学习(索引和切片,合并,分割,copy与deep copy)
  10. 关于webpack4下css提取打包去重复的那些事