📌  相关文章
📜  用于删除链表的每个第 K 个节点的 C++ 程序(1)

📅  最后修改于: 2023-12-03 15:27:10.483000             🧑  作者: Mango

用于删除链表的每个第 K 个节点的 C++ 程序

在实际开发中,我们经常需要对链表进行操作。删除每个第 K 个节点是一个常见的需求,通常我们的解决方案如下:

  • 遍历链表,计数器从 1 开始,每经过 K 个节点,删除当前节点。
  • 为了方便删除操作,我们使用指针保存上一个节点,从而使得删除操作变得容易。

下面是一个用于删除链表中每个第 K 个节点的 C++ 程序,你可以根据自己的需要进行修改和使用。

#include <iostream>

using namespace std;

// 定义链表节点结构体
struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

// 删除链表每个第 K 个节点的函数
ListNode* removeKthNode(ListNode* head, int k) {
    ListNode* pre = nullptr;    // 指向待删除节点前一个节点的指针
    ListNode* cur = head;       // 指向待删除节点的指针
    int count = 1;              // 节点计数器
    while (cur != nullptr) {    // 遍历链表
        if (count == k) {       // 当前节点是第 K 个节点
            ListNode* next = cur->next;
            if (pre == nullptr) {   // 如果当前节点是头节点
                head = next;        // 修改头节点为下一个节点
            } else {
                pre->next = next;   // 上一个节点指向下一个节点
            }
            delete cur;             // 释放当前节点
            cur = next;             // 继续遍历下一个节点
            count = 1;              // 从头开始计数
        } else {                    // 当前节点不是第 K 个节点
            pre = cur;              // 上一个节点指向当前节点
            cur = cur->next;        // 继续遍历下一个节点
            count++;                // 计数器加 1
        }
    }
    return head;
}

// 输出链表的函数
void printList(ListNode* head) {
    ListNode* cur = head;
    while (cur != nullptr) {
        cout << cur->val << " ";
        cur = cur->next;
    }
    cout << endl;
}

int main() {
    // 创建链表
    ListNode* head = new ListNode(1);
    ListNode* p2 = new ListNode(2);
    head->next = p2;
    ListNode* p3 = new ListNode(3);
    p2->next = p3;
    ListNode* p4 = new ListNode(4);
    p3->next = p4;
    ListNode* p5 = new ListNode(5);
    p4->next = p5;
    ListNode* p6 = new ListNode(6);
    p5->next = p6;
    ListNode* p7 = new ListNode(7);
    p6->next = p7;

    // 输出原链表
    cout << "Original List: ";
    printList(head);

    // 删除第 3 个节点
    int k = 3;
    head = removeKthNode(head, k);

    // 输出删除后的链表
    cout << "After Remove Kth Node: ";
    printList(head);

    return 0;
}

以上是一个简单的使用 C++ 实现的删除链表中每个第 K 个节点的程序。你可以自由地修改它以实现你的特定需求。