首页 > 其他分享 >LeetCode|876. 链表的中间结点

LeetCode|876. 链表的中间结点

时间:2023-03-21 23:01:12浏览次数:54  
标签:结点 876 head fast next 链表 中间 LeetCode

题目链接:876. 链表的中间结点

难度简单829收藏分享切换为英文接收动态反馈

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

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

示例 1:

img
输入:head = [1,2,3,4,5]
输出:[3,4,5]
解释:链表只有一个中间结点,值为 3 。

示例 2:

img
输入:head = [1,2,3,4,5,6]
输出:[4,5,6]
解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。

提示:

  • 链表的结点数范围是 [1, 100]
  • 1 <= Node.val <= 100

解题思路

快慢指针

使用两个指针变量,刚开始都位于链表的第 1 个结点,一个永远一次只走 1 步,一个永远一次只走 2 步,一个在前,一个在后,同时走。这样当快指针走完的时候,慢指针就来到了链表的中间位置。

思想是:快慢指针的前进方向相同,且它们步伐的「差」是恒定的,根据这种确定性去解决链表中的一些问题。

2b7a4130111600cf615b5584b3cc7f863d289a9a7d43b90147c79f51f68a5aa6-876-1 5c3f88cc6b312b7193a6e071cef93ec5eb3070005af23cad22a11e10ea0aca3e-876-2

说明:图例中使用了 Python 语言的写法,例如 while fast 在 fast 变量不是空结点的时候,返回 True,写成 while fast is not None 是语义更清晰的写法,但由于约定,且这种写法非常常见,我们就简写了。

Python代码

# Definition for singly-linked list.
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
class Solution:
    def middleNode(self, head: Optional[ListNode]) -> Optional[ListNode]:
        slow = fast = head
        while fast and fast.next:
            slow = slow.next
            fast = fast.next.next
        return slow

标签:结点,876,head,fast,next,链表,中间,LeetCode
From: https://www.cnblogs.com/tangjielin/p/17241943.html

相关文章

  • LeetCode|383. 赎金信
    题目链接:383.赎金信给你两个字符串:ransomNote和magazine,判断ransomNote能不能由magazine里面的字符构成。如果可以,返回true;否则返回false。magazine中的......
  • c++链表记录
    ListNode*pre=NULL;//定义一个空节点ListNode*tmp;//定义一个空的临时节点,此时tmp==NULL ListNode*cur=head;//定义一个等于节点head的节点 ListNode*du......
  • Leetcode 14. 最长公共前缀(模拟)
    题目链接在这里:最长公共前缀虽然是很简单的模拟题,但是鼠鼠学习了很多面向对象编程中遇到的一些问题,具体的可以看这个链接python中的静态方法与实例方法classSolution:......
  • 链表知识点
    链表知识点总结链表简介链表:是由一种一个或多个指针域和数据域组成的特殊数据结构链表类型单链表单链表中的指针域指向下一个节点双链表双链表中有两个指针域,一个......
  • LeetCode383. 赎金信
    题目描述:给你两个字符串:ransomNote和magazine,判断ransomNote能不能由magazine里面的字符构成。如果可以,返回true;否则返回false。magazine中的每个字符只能......
  • #yyds干货盘点# LeetCode程序员面试金典:最小K个数
    题目:设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。示例:输入:arr=[1,3,5,7,2,4,6,8],k=4输出:[1,2,3,4]代码实现:classSolution{publicint[]......
  • #yyds干货盘点# LeetCode面试题:跳跃游戏
    1.简述:给定一个非负整数数组 nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。 示例 1:输入:nu......
  • 数据结构-->带头双向循环链表--->优化
    好了,各位老铁!!现在开始本期讨论话题:<--头删数据----头插数据-->直接上手代码:头文件“List.h”#include<stdio.h>#inculde<stdlib.h>//扩容函数malloc库#include<asse......
  • algrothm_reverse(algrothm+round)【反转链表】
    ......
  • 刷爆 LeetCode 双周赛 100,单方面宣布第一题最难
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。大家好,我是小彭。上周末是LeetCode第100场双周赛,你参加了吗?这场周赛整体没有Hard题,但是......