C#LeetCode刷题之#876-链表的中间结点(Middle of the Linked List)
问题
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 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)相关推荐
- LeetCode Java刷题笔记—876. 链表的中间结点
876. 链表的中间结点 给定一个头结点为 head 的非空单链表,返回链表的中间结点.如果有两个中间结点,则返回第二个中间结点. 简单难度.使用快慢指针即可,快指针fast每次走2步,慢指针slow ...
- 每日一道leetcode(python)876. 链表的中间结点
每日一道leetcode(python)876. 链表的中间结点 2021-08-19 给定一个头结点为 head 的非空单链表,返回链表的中间结点.如果有两个中间结点,则返回第二个中间结点.示例 1 ...
- 【leetcode刷题日记】链表
各个数据结构和算法的链接总结如下: 待补充. 链表 总结:本部分内容其实就是考察对指针的操作.通过指针会改变对象指向的方向,这些都是需要注意.有一些技巧,类似于快慢指针,加一个脑袋(哨兵/头节点),h ...
- LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
文章目录 一.编程题:707. 设计链表(双向链表-带头尾双结点) 1.题目描述 2.示例1: 3.提示: 二.解题思路 1.思路 2.复杂度分析: 3.算法图解(双向链表) 三.代码实现 三.单向链 ...
- leetcode刷题:删除链表中的节点
题目: 分析: 删除链表中的节点的常见的方法是定位到待删除节点的上一个节点,修改上一个节点的 \textit{next}next 指针,使其指向待删除节点的下一个节点,即可完成删除操作. 这道题中,传 ...
- leetcode刷题:相交链表
题目: 分析: 判断两个链表是否相交,可以使用哈希集合存储链表节点. 首先遍历链表 \textit{headA}headA,并将链表 \textit{headA}headA 中的每个节点加入哈希集合中 ...
- leetcode刷题:反转链表I
1.题目 分析: 代码如下: //迭代反转法,head 为无头节点链表的头指针 link * iteration_reverse(link* head) {if (head == NULL || he ...
- 【数据结构】(图解)leetcode刷题之单链表(中)
- C#LeetCode刷题-链表
链表篇 # 题名 刷题 通过率 难度 2 两数相加 29.0% 中等 19 删除链表的倒数第N个节点 29.4% 中等 21 合并两个有序链表 C#LeetCode刷题之#21-合并两个有序链 ...
最新文章
- 网媒亟待建立广告价值衡量体系
- js进阶 12-1 jquery的鼠标事件有哪些
- 属性面板 脚本_3.1 创建和使用脚本
- 辐射避难所服务器维护,《辐射:避难所Online》6月2日停服维护更新公告
- 计算机主机外部的连接端口有何作用,微机原理 课后题 标准答案
- PHP笔记-用户登录例子
- 用php循环星期一到星期日,php – 获取最后一个星期一 – 星期日的日期:有更好的方法吗?...
- Spring中定时任务Quartz集群配置学习
- matlab2c使用c++实现matlab函数系列教程- polyval函数
- 直线算法(Bresenham)
- 制作一个简易的即时聊天工具
- android系统解压zip文件,如何在Android手机上解压缩rar / zip文件
- key去掉下划线自动大写首字母工具类
- 如何在matplotlib中使用新罗马字体
- 高版本node,无法编译程序,删除所有文件
- yar php使用,php的轻量级rpc框架yar
- ​​【​观察】萨提亚为微软中国定下主基调 平台价值释放与生态伙伴共赢
- BIM自动识别三维地图:Revit自动识别三维地图流程方法
- 部署IIS网站HTTPS访问
- 期刊论文发表的字数不够怎么办