A.每日一题:2095. 删除链表的中间节点

题目链接:2095. 删除链表的中间节点(中等)

算法原理:

解法:复用876题代码

4ms击败95.21%

时间复杂度O(N)

前置题目:A.每日一题:876. 链表的中间结点+2130. 链表最大孪生和 中的876题

为了删除链表的中间节点,我们需要让慢指针少走一步,最终落到中间节点的前一个节点,然后越过后面一个节点,就能完成"删除"的效果~~

咋让慢指针少走一步??可以让快指针走两步,少循环一次,这样就等同于慢指针少走一步了

特别的,当只有一个节点的时候,快指针没办法走两步,需要特殊判断,返回 null

Java代码:

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    //2095. 删除链表的中间节点
    public ListNode deleteMiddle(ListNode head) {
        //只有一个节点
        if(head.next==null) return null;
        //876.链表的中间结点
        //本题先让快指针走两步,慢指针少走一步,这样最终刚好落在中间节点的前一个节点
        ListNode fast=head.next.next,slow=head;
        while(fast!=null&&fast.next!=null){
            slow=slow.next;
            fast=fast.next.next;
        }
        slow.next=slow.next.next;//删除slow的下一个
        return head;
    }
}
相关推荐
code bean8 小时前
【C#】 `Channel<T>` 深度解析:生产者-消费者模式的现代解法
数据结构·c#
storyseek9 小时前
前缀和实现Kogge-Stone算法
数据结构·算法
元Y亨H10 小时前
深度解构:数据结构与算法的理论基石与工程演进
数据结构·算法
元Y亨H10 小时前
数据结构与算法的通俗指南
数据结构·算法
HeiSenBerg10 小时前
Android Lifecycle 原理完整剖析:从监听、事件分发到状态驱动
面试
2301_7644413310 小时前
用动力学系统(微分方程)为 Kernberg 的客体关系单元提供数学化的操作定义,把“自体—客体“这对心理结构建模成一个二维耦合系统
数据结构·python·算法·数学建模
captain37610 小时前
多线程线程安全问题
java·java-ee
keep intensify10 小时前
最长有效括号
算法·leetcode·动态规划
CoderYanger10 小时前
A.每日一题:1979. 找出数组的最大公约数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
灵极海10 小时前
LangChain4j RAG 实战完整指南:从入门到踩坑
java·langchain