📅  最后修改于: 2023-12-03 15:27:10.483000             🧑  作者: Mango
在实际开发中,我们经常需要对链表进行操作。删除每个第 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 个节点的程序。你可以自由地修改它以实现你的特定需求。