leetcode力扣刷题打卡
题目:2095. 删除链表的中间节点
描述:给你一个链表的头节点 head 。删除 链表的 中间节点 ,并返回修改后的链表的头节点 head 。
长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点(下标从 0 开始),其中 ⌊x⌋ 表示小于或等于 x 的最大整数。
对于 n = 1、2、3、4 和 5 的情况,中间节点的下标分别是 0、1、1、2 和 2 。
解题思路
1、双指针;
2、注意只有一个节点的特殊情况;
原代码##
class Solution {
public:
ListNode* deleteMiddle(ListNode* head) {
ListNode *slow = head, *fast = head;
if (fast->next == nullptr) return nullptr;
while (1) {
if (fast->next == nullptr) {
slow->val = slow->next->val;
slow->next = slow->next->next;
break;
} else if (fast->next != nullptr && fast->next->next == nullptr) {
slow->next = slow->next->next;
break;
}
fast = fast->next->next;
slow = slow->next;
}
return head;
}
};