力扣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;
    }
}
相关推荐
ChinaRainbowSea8 分钟前
Windows 安装 RabbitMQ 消息队列超详细步骤(附加详细操作截屏)
java·服务器·windows·后端·rabbitmq·ruby
一世暖阳79317 分钟前
JDK、JRE、Eclipse
java·开发语言·eclipse
你我约定有三26 分钟前
分布式微服务--GateWay(1)
java·开发语言·分布式·微服务·架构·gateway
给我个面子中不36 分钟前
java回顾八股文中想起的知识点
java·开发语言·python
好易学·数据结构4 小时前
可视化图解算法57:字符串的排列
数据结构·算法·leetcode·面试·笔试·回溯算法·牛客
Warren986 小时前
Vue2博客项目笔记(第一天)
java·开发语言·javascript·vue.js·windows·笔记·ecmascript
Charles Wesley6 小时前
11:java学习笔记:1D array(1维数组)
java·笔记·学习·eclipse
এ᭄画画的北北6 小时前
力扣-283.移动零
算法·leetcode
stillaliveQEJ7 小时前
【JavaEE】多线程(一)
java·java-ee
present--017 小时前
【JAVA EE初阶】多线程(下)
java·java-ee