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删除链表的中间节点,快慢指针和链表转数组再转回链表