力扣 1474. 删除链表 M 个节点之后的 N 个节点 C++

    科技2026-01-26  10

    给定链表 head 和两个整数 m 和 n. 遍历该链表并按照如下方式删除节点:

    开始时以头节点作为当前节点. 保留以当前节点开始的前 m 个节点. 删除接下来的 n 个节点. 重复步骤 2 和 3, 直到到达链表结尾. 在删除了指定结点之后, 返回修改过后的链表的头节点.

    进阶问题: 你能通过就地修改链表的方式解决这个问题吗?

    C++

    class Solution { public: ListNode* deleteNodes(ListNode* head, int m, int n) { auto cur_node=head; auto cur_head=head; while(cur_node){ //先找到m个结点的最后一个结点 for(int i=0;i<m-1 && cur_node;++i){ cur_node=cur_node->next; } //把这个第 m 个结点作为辅助标识头结点 if(cur_node){ cur_head=cur_node; cur_node=cur_node->next; } //删除随后的 n 个结点 for(int i=0;i<n && cur_node;++i){ cur_head->next=cur_node->next; delete cur_node; cur_node=cur_head->next; } } return head; } };
    Processed: 0.013, SQL: 9