लिंकड लिस्टचा मधला नोड (Middle Node) हटवा

तुम्हाला सिंगलली लिंकड लिस्टमधून (singly linked list) मधला नोड काढून टाकणे आवश्यक आहे. 0-आधारित इंडेक्सिंग (0-based indexing) वापरल्यास, मधला नोड हा ⌊n / 2⌋-वा नोड असतो.

हे कार्यक्षमतेने कसे सोडवायचे ते खाली दिले आहे.

रणनीती (The Strategy)

एकाच पासमध्ये (one pass) मधला नोड शोधण्यासाठी दोन पॉइंटर्सचा वापर करा.

लॉजिक (The Logic)

  1. एज केस (edge case) हाताळा. जर लिस्टमध्ये फक्त एकच नोड असेल, तर null रिटर्न करा.
  2. स्लो आणि फास्ट पॉइंटर्स 'head' वर इनिशियलाइज करा.
  3. फास्ट पॉइंटर दोन पावले आणि स्लो पॉइंटर एक पाऊल पुढे सरकवा.
  4. स्लो पॉइंटरच्या एक पाऊल मागे राहण्यासाठी 'prev' पॉइंटर अपडेट करा.
  5. लूप संपल्यानंतर, 'prev' नोडला 'slow' नंतरच्या नोडशी जोडा. यामुळे मधला नोड वगळला (skip) जातो.

कॉम्प्लेक्सिटी (Complexity)

PHP अंमलबजावणी (PHP Implementation)

function deleteMiddle(ListNode $head): ?ListNode
{
    if ($head->next == null) {
        return null;
    }

    $slow = $head;
    $fast = $head;
    $prev = null;

    while ($fast !== null && $fast->next !== null) {
        $prev = $slow;
        $slow = $slow->next;
        $fast = $fast->next->next;
    }

    $prev->next = $slow->next;

    return $head;
}

Source: https://dev.to/mdarifulhaque/2095-delete-the-middle-node-of-a-linked-list-4jf1