2095. Delete the Middle Node of a Linked List
题目简介
/**
* @param {ListNode} head
* @return {ListNode}
*/
题目给我们一个链表的头 head
要求我们删除链表的中间元素,并且返回新链表的头
解题思路
寻找链表的中间元素一般思路是使用快慢指针,快指针的行进速度是慢指针的两倍
这样一来一旦快指针走到链表末尾或者 null 的时候,慢指针恰巧指向中间元素
为了删除中间元素,我们需要有一个指针指向中间元素,这个指针需要在我们每次更新快慢指针之前指向慢指针
最后,为了处理只有一个元素的 case,我们加一个 if case 返回 null
Javascript
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var deleteMiddle = function(head) {
if(!head.next) {
return null
}
let slow = head
let fast = head
let prev = null
while(fast && fast.next) {
prev = slow
slow = slow.next
fast = fast.next.next
}
prev.next = slow.next
return head
};