题目描述
给你一个链表的头节点 head 。删除 链表的 中间节点 ,并返回修改后的链表的头节点 head 。长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点(下标从 0 开始),其中 ⌊x⌋ 表示小于或等于 x 的最大整数。对于 n = 1、2、3、4 和 5 的情况,中间节点的下标分别是 0、1、1、2 和 2 。
解析
经典的快慢指针的解法,快指针一次走两步,慢指针一次走一步即可刚好在快指针到尾部的时候走到中间
public ListNode deleteMiddle(ListNode head) {if (head == null || head.next == null) {return null;}ListNode dummy = new ListNode(0);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;}