leetcode-876. 链表的中间结点解法
给定一个带有头结点 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 之间。
来源:力扣(LeetCode)
对于这样一个问题,我们很容易就可以想到解决方法,首先通过遍历链表得到表长n,然后再次从表头出发循环n/2次找到中间节点,这样的算法时间复杂度为O(3n/2)。
但是我们还有一个更好的方法,既双指针法来完成这道题目。
我们需要两个快慢指针,慢指针每次移动一位,快指针每次移动两位,而当快指针移动到尾部时,我们的慢指针刚好移动到中间节点,这样的算法时间复杂度为O(n/2)。
fast = fast->next->next;slow = slow->next;
因为题目要求当存在两个中间节点,既长度为偶数时,需要返回第二个中间节点,所以我们可以这样设置循环条件
while( fast && fast->next ){fast = fast->next->next;slow = slow->next;}
我们不用去判断fast->next->next是否存在,我们可以先让指针移动,然后在下一次循环中判断已经指向后两项的fast是否为空指针,这样就能保证当存在两个中间节点时我们返回的时第二个节点。
完整代码如下:
struct ListNode* middleNode(struct ListNode* head){struct ListNode* fast =head;struct ListNode* slow =head;while( fast && fast->next ){fast = fast->next->next;slow = slow->next;}return slow;
}
leetcode-876. 链表的中间结点解法相关推荐
- LeetCode 876——链表的中间结点
1. 题目 给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形 ...
- Leetcode 876. 链表的中间结点 (每日一题 20210918)
给定一个头结点为 head 的非空单链表,返回链表的中间结点.如果有两个中间结点,则返回第二个中间结点.示例 1:输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式:[3,4,5]) ...
- LeetCode 876. 链表的中间结点(快慢指针)
1. 题目 给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 2. 解题 快慢指针法 class Solution {public:List ...
- leetcode 876. 链表的中间结点 做题笔记
题目: 给定一个头结点为 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式:[ ...
- LeetCode 876. 链表的中间结点
原题链接 解题思路:快慢指针,快指针走两步,慢指针走一步.快指针到NULL慢指针自然到中间位置 /*** Definition for singly-linked list.* struct List ...
- leetcode 876.链表中间结点
链表中间结点 leetcode题目链接:876. 链表的中间结点 一.朴素解法 最直观的思路,因为不知道这个链表的长度,就先通过一次循环统计链表的长度len 之后第二次遍历,直到找到中间结点,输出 / ...
- LeetCode刷题 876链表的中间结点
876. 链表的中间结点 难度简单550收藏分享切换为英文接收动态反馈 给定一个头结点为 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[ ...
- 每日一道leetcode(python)876. 链表的中间结点
每日一道leetcode(python)876. 链表的中间结点 2021-08-19 给定一个头结点为 head 的非空单链表,返回链表的中间结点.如果有两个中间结点,则返回第二个中间结点.示例 1 ...
- JavaScript——leetcode算法入门876. 链表的中间结点【双指针专题】
题目描述 给定一个头结点为 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式: ...
- 【LeetCode题目详解】(二)206.反转链表、876.链表的中间结点
目录 一.力扣第206题:反转链表 1.思路一 2.思路二 二.力扣第876题:链表的中间结点 1.思路一 2.思路二 总结 一.力扣第206题:反转链表 题目链接:206. 反转链表 - 力扣(Le ...
最新文章
- leetcode 424. Longest Repeating Character Replacement | 424. 替换后的最长重复字符(Java)
- maven打jar包pom配置
- go micro java_Java Micro Framework:您无法忽略的新趋势
- @Value(${xxxx})注解的配置及使用
- Tensorflow取消占用全部GPU
- 好用的python学习软件_5种好用的Python工具!Python学习分析
- Android中Service的使用
- 华为云PaaS梳理了客户可能上云的三类场景和七种解决方案
- springboot16 整合MyBatis
- 对文字颜色从左到右(横向)渐变的一点理解(坑)
- 深入浅出python系列(二):运算符
- AVR单片机学习笔记
- Matlab如何设置图中坐标以10的次方显示
- web python 取代js_web前端:JavaScript,只有你想不到
- linux计划任务5个*分表代表什么,Linux定时任务Crontab命令
- 微擎 人人商城 对接京东vop 对接京东商品,同步商品 地址,库存,价格,上下架等。五 (上)京东后台提交订单,用户地址校验...
- keil写文字怎么会乱码_刚刚!2020福建高考作文题揭晓!你会怎么写?
- NYOJ 1248 海岛争霸 (利用最短路径可解)
- VSCode Competitive Programming Helper (cph)插件和Code Runner的C++17设置
- JAVA计算机毕业设计科院垃圾分类系统部署+源码+数据库+系统+lw文档