首页 > 其他分享 >OJ08题:876. 链表的中间结点

OJ08题:876. 链表的中间结点

时间:2024-11-12 16:17:18浏览次数:3  
标签:结点 slow ListNode 876 fast next 链表 OJ08 节点

目录

  • 题目
  • 思路分析
  • 代码展示


题目

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

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

示例 1:
在这里插入图片描述
输入:head = [1,2,3,4,5]
输出:[3,4,5]
解释:链表只有一个中间结点,值为 3 。
示例 2:
在这里插入图片描述
输入:head = [1,2,3,4,5,6]
输出:[4,5,6]
解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。

这题其实没什么难度·,我们主要要体会这个分析的过程:

思路分析

这题我们最简单的方法就是快慢指针的方法:
我们定义快慢两个指针:slow和fast,slow一次跳一个节点,fast一次跳两个节点,最后fast跳到最后的节点,slow就是中间节点。
过程简单,这题主要在于我们怎样让循环停下来,我们来分析一下:
我们先来看一下有奇数个节点:
在这里插入图片描述
我们可以看到,当slow指向中间节点的时候fast->next = NULL,这时候循环结束
有偶数个节点:
在这里插入图片描述

这个时候当slow指向中间节点的时候,fast指向NULL;

对这两种情况分析我们知道,当fast指向NULL或fast->next=NULL时,循环结束,此时,slow指向的节点为中间节点,

代码展示

struct ListNode {
    int val;
    struct ListNode* next;
};
struct ListNode* middleNode(struct ListNode* head) {
    struct ListNode* slow = head;   //慢指针
    struct ListNode* fast = head;   //快指针

    while (fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
    }

    return slow;
}

代码也是可以通过leetcode的:
在这里插入图片描述


标签:结点,slow,ListNode,876,fast,next,链表,OJ08,节点
From: https://blog.csdn.net/2303_78558007/article/details/143672841

相关文章

  • 代码随想录算法训练营第三天(LeetCode203.移除链表元素;LeetCode707.设计链表;LeetCode20
    LeetCode203.移除链表元素题目链接:LeetCode203.移除链表元素题目链接思路这道题目主要考察的是移除一个链表当中的元素,我们可以先在给定的链表前面加一个虚拟头结点,这样我们对给定链表头结点的操作和给定链表其余结点的操作就会变得相同。代码classSolution{p......
  • 代码随想录算法训练营第四天(LeetCode24.两两交换链表中的节点;LeetCode10.删除链表的倒
    LeetCode24.两两交换链表中的节点题目链接:两两交换链表中的节点题目链接思路这道题其实就是一个模拟题,要求每次交换链表中两个相邻的节点(1、2节点互换;3、4节点互换;2、3节点不互换,意思就是交换过的节点不参与后续的交换了),同时只能进行节点交换,不能进行值交换。主要考......
  • 【初阶数据结构与算法】线性表之链表的分类以及双链表的定义与实现
    文章目录一、链表的分类二、双链表的实现1.双链表结构的定义2.双链表的初始化和销毁初始化函数1初始化函数2销毁函数3.双链表的打印以及节点的申请打印函数节点的申请4.双链表的头插和尾插头插函数尾插函数5.双链表的查找和判空查找函数判空函数6.双链表的头删和尾......
  • Mysql篇-Buffer Pool中的三大链表
    为什么要有BufferPool?虽然说MySQL的数据是存储在磁盘里的,但是也不能每次都从磁盘里面读取数据,这样性能是极差的。要想提升查询性能,那就加个缓存。所以,当数据从磁盘中取出后,缓存内存中,下次查询同样的数据的时候,直接从内存中读取。为此,Innodb存储引擎设计了一个缓冲池(Buffer......
  • 计算二叉树(二叉链表)的带权路径长度
    方法1#include<bits/stdc++.h>#defineintlonglong#definemod998244353usingnamespacestd;usingpii=pair<int,int>;typedefstructBtnode{ intdata; structBtnode*lc,*rc; }*Btree,Btnode;//笔试这个可以放上面,但是真的写程序应该把getwpl放在g......
  • AcWing 1626:链表元素分类 ← 单链表
    【题目来源】https://www.acwing.com/problem/content/1628/【题目描述】给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而[0,K]区间内的元素都排在大于K的元素前面。但每一类内部元素的顺序是不能改变的。例如:给定链表为18→......
  • 随机链表 (Randomized Linked List)、随机树 (Randomized Tree)详细解读
    一、随机化数据结构(RandomizedDataStructures)随机化数据结构是通过引入随机性来优化传统数据结构的性能,特别是在最坏情况性能表现较差时。通过随机化,许多原本具有较差时间复杂度的操作可以实现平均O(1)或O(logn)的时间复杂度,减少了最坏情况下的复杂度。常见的随机......
  • 【模板】如何实现链表元素的反转
    反转链表是链表操作中一个经典的问题,也是面试中常见的考题。本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作。我们将使用C++代码演示具体实现,同时分析时间复杂度和空间复杂度。问题定义给定一个单链表,我们需要将链表的节点顺序反转。例如,链表1......
  • 【java】通过<类与对象> 引入-> 链表
    目录链表碎片化:内存碎片产生的原因如何避免内存碎片?链表类型单链表双链表单循环链表双循环链表java是如何创建链表的?类与对象类是什么?什么是对象?构建链表头指针简画内存图: ​编辑尾插法 头插法输出链表的长度输出链表的值链表为什么会有链表?  ......
  • 将给定的表达式树(二叉链表存储)转换为等价的中缀表达式(递归)
    3765.表达式树可以拿这题验证自己的代码对不对ps:这里不是这题的答案,参照代码思路写即可voidBtreeToe(Btree*root){ BtreeToExp(root,1);//根的高度为1 }voidBtreeToExp(Btree*root,intdep){ if(root==NULL)return;//如果是空结点返回 elseif(!root->lef......