题目:
给你一个链表的头节点 head
。删除 链表的 中间节点 ,并返回修改后的链表的头节点 head
。
长度为 n
链表的中间节点是从头数起第 ⌊n / 2⌋
个节点(下标从 0 开始),其中 ⌊x⌋
表示小于或等于 x
的最大整数。
- 对于
n
=1
、2
、3
、4
和5
的情况,中间节点的下标分别是0
、1
、1
、2
和2
。
思路:在找中间节点的过程中,用一个pre节点始终保持pre.next=slow
代码:
class Solution {
public ListNode deleteMiddle(ListNode head) {
if (head.next == null)
return null;
ListNode pre = null;
ListNode slow = head, fast = head;
while (fast != null && fast.next != null) {
pre = slow;
slow = slow.next;
fast = fast.next.next;
}
pre.next = slow.next;
return head;
}
}
性能:
时间复杂度o(n)
空间复杂度o(1)