LeetCode 5943 删除链表的中间节点[双指针] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 5943 删除链表的中间节点[双指针] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。



解题思路

一道非常简单的双指针题目,定义快慢指针以及一个pre指针,快指针每次走两个节点,慢指针走一个节点,pre指针每次都在慢指针的前一位,当快指针到达终点或者是终点的next(即刚好空),此时的slow就在中间,利用pre把slow所在的节点给做掉,代码如下:

代码

/**
 * Definition for singly-linked list.
 * struct ListNode 
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) 
 *     ListNode(int x) : val(x), next(nullptr) 
 *     ListNode(int x, ListNode *next) : val(x), next(next) 
 * ;
 */
class Solution 
public:
    ListNode* deleteMiddle(ListNode* head) 
        if(head->next == nullptr) 
            return nullptr;
        
        ListNode* slow = head;
        ListNode* fast = head;
        ListNode* pre = nullptr;
        while(1) 
            if(fast == nullptr || fast->next == nullptr) 
                break;
            
            pre = slow;
            slow = slow->next;
            fast = fast->next->next;
        
        pre->next = slow->next;
        slow->next = nullptr;
        delete slow;
        return head;
    
;

以上是关于LeetCode 5943 删除链表的中间节点[双指针] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

leetcode删除链表的中间节点,快慢指针和链表转数组再转回链表

leetcode删除链表的中间节点,快慢指针和链表转数组再转回链表

leetcode删除链表的中间节点,快慢指针和链表转数组再转回链表

每日一题之LeetCode237删除链表中的节点876链表的中间节点

Leetcode——删除链表的倒数第N个节点

算法面试题 02.03. 删除中间节点