2095. Delete the Middle Node of a Linked List

Leetcode link

题目简介

/**
 * @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
};

results matching ""

    No results matching ""