问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3836 访问。

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

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

输入:[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.

输入:[1,2,3,4,5,6]

输出:此列表中的结点 4 (序列化形式:[4,5,6])

由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。

提示:

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


Given a non-empty, singly linked list with head node head, return a middle node of linked list.

If there are two middle nodes, return the second middle node.

Input: [1,2,3,4,5]

Output: Node 3 from this list (Serialization: [3,4,5])

The returned node has value 3.  (The judge's serialization of this node is [3,4,5]).Note that we returned a ListNode object ans, such that:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, and ans.next.next.next = NULL.

Input: [1,2,3,4,5,6]

Output: Node 4 from this list (Serialization: [4,5,6])

Since the list has two middle nodes with values 3 and 4, we return the second one.

Note:

The number of nodes in the given list will be between 1 and 100.


示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3836 访问。

public class Program {public static void Main(string[] args) {var head = new ListNode(1) {next = new ListNode(2) {next = new ListNode(3) {next = new ListNode(4)}}};var res = MiddleNode(head);ShowArray(res);res = MiddleNode2(head);ShowArray(res);Console.ReadKey();}private static void ShowArray(ListNode list) {var node = list;while(node != null) {Console.Write($"{node.val} ");node = node.next;}Console.WriteLine();}private static ListNode MiddleNode(ListNode head) {//暴力解法var count = 0;var node = head;while(node != null) {count++;node = node.next;}var mid = count / 2;node = head;var index = 0;while(node != null && index++ < mid) {node = node.next;}return node;}private static ListNode MiddleNode2(ListNode head) {//快慢双指针var slow = head;var fast = head;while(fast != null && fast.next != null) {fast = fast.next.next;slow = slow.next;}return slow;}public class ListNode {public int val;public ListNode next;public ListNode(int x) { val = x; }}}

以上给出2种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3836 访问。

3 4
3 4

分析:

显而易见,以上2种算法的时间复杂度均为: 

C#LeetCode刷题之#876-链表的中间结点(Middle of the Linked List)相关推荐

  1. LeetCode Java刷题笔记—876. 链表的中间结点

    876. 链表的中间结点 给定一个头结点为 head 的非空单链表,返回链表的中间结点.如果有两个中间结点,则返回第二个中间结点. 简单难度.使用快慢指针即可,快指针fast每次走2步,慢指针slow ...

  2. 每日一道leetcode(python)876. 链表的中间结点

    每日一道leetcode(python)876. 链表的中间结点 2021-08-19 给定一个头结点为 head 的非空单链表,返回链表的中间结点.如果有两个中间结点,则返回第二个中间结点.示例 1 ...

  3. 【leetcode刷题日记】链表

    各个数据结构和算法的链接总结如下: 待补充. 链表 总结:本部分内容其实就是考察对指针的操作.通过指针会改变对象指向的方向,这些都是需要注意.有一些技巧,类似于快慢指针,加一个脑袋(哨兵/头节点),h ...

  4. LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)

    文章目录 一.编程题:707. 设计链表(双向链表-带头尾双结点) 1.题目描述 2.示例1: 3.提示: 二.解题思路 1.思路 2.复杂度分析: 3.算法图解(双向链表) 三.代码实现 三.单向链 ...

  5. leetcode刷题:删除链表中的节点

    题目: 分析: 删除链表中的节点的常见的方法是定位到待删除节点的上一个节点,修改上一个节点的 \textit{next}next 指针,使其指向待删除节点的下一个节点,即可完成删除操作. 这道题中,传 ...

  6. leetcode刷题:相交链表

    题目: 分析: 判断两个链表是否相交,可以使用哈希集合存储链表节点. 首先遍历链表 \textit{headA}headA,并将链表 \textit{headA}headA 中的每个节点加入哈希集合中 ...

  7. leetcode刷题:反转链表I

    1.题目 分析: 代码如下: //迭代反转法,head 为无头节点链表的头指针 link * iteration_reverse(link* head) {if (head == NULL || he ...

  8. 【数据结构】(图解)leetcode刷题之单链表(中)

  9. C#LeetCode刷题-链表

    链表篇 # 题名 刷题 通过率 难度 2 两数相加   29.0% 中等 19 删除链表的倒数第N个节点   29.4% 中等 21 合并两个有序链表 C#LeetCode刷题之#21-合并两个有序链 ...

最新文章

  1. 网媒亟待建立广告价值衡量体系
  2. js进阶 12-1 jquery的鼠标事件有哪些
  3. 属性面板 脚本_3.1 创建和使用脚本
  4. 辐射避难所服务器维护,《辐射:避难所Online》6月2日停服维护更新公告
  5. 计算机主机外部的连接端口有何作用,微机原理 课后题 标准答案
  6. PHP笔记-用户登录例子
  7. 用php循环星期一到星期日,php – 获取最后一个星期一 – 星期日的日期:有更好的方法吗?...
  8. Spring中定时任务Quartz集群配置学习
  9. matlab2c使用c++实现matlab函数系列教程- polyval函数
  10. 直线算法(Bresenham)
  11. 制作一个简易的即时聊天工具
  12. android系统解压zip文件,如何在Android手机上解压缩rar / zip文件
  13. key去掉下划线自动大写首字母工具类
  14. 如何在matplotlib中使用新罗马字体
  15. 高版本node,无法编译程序,删除所有文件
  16. yar php使用,php的轻量级rpc框架yar
  17. ​​【​观察】萨提亚为微软中国定下主基调 平台价值释放与生态伙伴共赢
  18. BIM自动识别三维地图:Revit自动识别三维地图流程方法
  19. 部署IIS网站HTTPS访问
  20. 期刊论文发表的字数不够怎么办

热门文章

  1. C++—— cin输入流详解
  2. JMeter——并发测试工具类安装及使用
  3. 03 使用T-SQL语句实现数据的添加、更新、删除测试分析 1214
  4. 对象数组与普通数组 java 0913
  5. dj电商-数据库的远程连接
  6. python-循环-打印菱形图案
  7. 索引-bootsrap
  8. Laravel 中使用Goutte + GuzzleHttp 组件设置 headers无效的原因探究以及解决方案
  9. 记一次mysql进程无法启动的解决方案
  10. ansible /usr/bin/python: not found