力扣2095.删除链表的中间节点(java快慢指针)

Problem: 2095. 删除链表的中间节点

文章目录

思路

利用快慢指针,快指针每次走两步,慢指针每次走一步(循环退出条件是fast指针不为空同时fast.next不为空),但是我们容易发现这样到最后slow指针正好指向我们需要删除的节点,由于没有前指针,这样我们不便操作。此时可以借助虚拟头节点解决此问题。

解题方法

1.慢指针指向虚拟头节点,快指针指向链表头节点

2.快指针每次走两步,慢指针走一步(循环退出条件是fast指针不为空同时fast.next不为空);

3.最后将慢指针指向的节点的next指针指向其下一个节点的下一个节点(solw.next = solw.next.next)

复杂度

  • 时间复杂度:

O ( n ) O(n) O(n)

  • 空间复杂度:

O ( 1 ) O(1) O(1)

Code

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 {
    public ListNode deleteMiddle(ListNode head) {
        ListNode dummy = new ListNode();
        dummy.next = head;
        ListNode fast = head;
        ListNode slow = dummy;
        while (fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;
        }
        slow.next = slow.next.next;
        return dummy.next;
    }
}
相关推荐
柏木乃一33 分钟前
双向链表增删改查的模拟实现
开发语言·数据结构·算法·链表
小周不摆烂1 小时前
Java Web从入门到精通:全面探索与实战(一)
java
cherryc_1 小时前
JavaSE基础——第六章 类与对象(二)
java·开发语言
快来卷java1 小时前
JVM虚拟机篇(三):JVM运行时数据区与方法区详解
java·jvm·mysql
whltaoin3 小时前
Java实现N皇后问题的双路径探索:递归回溯与迭代回溯算法详解
java·算法
梭七y4 小时前
【力扣hot100题】(032)排序链表
算法·leetcode·链表
SsummerC4 小时前
【leetcode100】数组中的第K个最大元素
python·算法·leetcode
编程绿豆侠4 小时前
力扣HOT100之链表:206. 反转链表
算法·leetcode·链表
nlog3n5 小时前
Java策略模式详解
java·bash·策略模式
记得早睡~7 小时前
leetcode51-N皇后
javascript·算法·leetcode·typescript