• 【力扣 095】2095. 删除链表的中间节点


    2095. 删除链表的中间节点

    给你一个链表的头节点 head 。删除 链表的 中间节点 ,并返回修改后的链表的头节点 head 。

    长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点(下标从 0 开始),其中 ⌊x⌋ 表示小于或等于 x 的最大整数。

    对于 n = 1、2、3、4 和 5 的情况,中间节点的下标分别是 0、1、1、2 和 2 。
     

    示例 1:

    输入:head = [1,3,4,7,1,2,6]
    输出:[1,3,4,1,2,6]
    解释:
    上图表示给出的链表。节点的下标分别标注在每个节点的下方。
    由于 n = 7 ,值为 7 的节点 3 是中间节点,用红色标注。
    返回结果为移除节点后的新链表。 
    示例 2:

    输入:head = [1,2,3,4]
    输出:[1,2,4]
    解释:
    上图表示给出的链表。
    对于 n = 4 ,值为 3 的节点 2 是中间节点,用红色标注。
    示例 3:

    输入:head = [2,1]
    输出:[2]
    解释:
    上图表示给出的链表。
    对于 n = 2 ,值为 1 的节点 1 是中间节点,用红色标注。
    值为 2 的节点 0 是移除节点 1 后剩下的唯一一个节点。

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/delete-the-middle-node-of-a-linked-list
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    代码实现:

    /**
     * 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) return head;
            if(!head->next) return head->next;
            ListNode *pre, *slow, *fast;
            pre = slow = fast = head;
            while(fast && fast->next)
            {
                fast = fast->next->next;
                pre = slow;
                slow = slow->next;
            }
            pre->next = pre->next->next;
            return head;
        }
    };
  • 相关阅读:
    SPOJ_DSUBSEQ Distinct Subsequences
    ZOJ 3791 An easy game DP+组合数
    UVALive 4287 SCC-Tarjan 加边变成强连通分量
    ZOJ 3795 Grouping 强连通分量-tarjan
    HDU 4915 多校5 Parenthese sequence
    ZOJ 3790 Consecutive Blocks
    HDU 4866 多校1 主席树+扫描线
    求最大值及其下标
    查找整数
    抓老鼠
  • 原文地址:https://www.cnblogs.com/sunbines/p/16332100.html
Copyright © 2020-2023  润新知