C++程序 在给定位置删除链表节点
链表是一种常用的数据结构,它由一系列结点组成,每个结点包含数据和指向下一个结点的指针。删除链表节点是链表操作中比较常见的一种,本文将介绍如何在给定位置上删除链表节点的C++程序实现。
C++实现过程
定义链表节点
在使用链表前,首先需要定义链表节点结构。链表节点通常包含两个成员变量:数据和指向下一个节点的指针。在本例中,链表节点的数据类型被定义为整型。
struct Node {
int data;
Node* next;
Node(int x) : data(x), next(NULL) {}
};
在这个结构体中,我们使用了构造函数,这个构造函数会在创建结点时自动初始化结点的数据和指针。
删除链表节点
链表的删除操作需要分为两种情况:
- 删除头结点
- 删除中间节点或尾节点
下面的代码给出了在给定位置上删除链表节点的C++程序实现。
Node* deleteNode(Node* head, int index) {
if (index == 0) {
return head->next;
}
Node* cur = head;
for (int i = 0; i < index - 1; i++) {
cur = cur->next;
}
cur->next = cur->next->next;
return head;
}
在这个函数中,我们使用了两个节点指针:cur和head。head指针指向链表的头结点,cur指针则指向待删除节点的前一个节点。
如果我们想要删除头结点,我们只需要把头结点的下一个节点作为新的头结点返回即可。
if (index == 0) {
return head->next;
}
如果我们想要删除中间节点或尾节点,则需要使用循环找到待删除节点的前一个节点。
Node* cur = head;
for (int i = 0; i < index - 1; i++) {
cur = cur->next;
}
循环的终止条件是找到待删除节点的前一个节点,此时cur指针指向该节点。
最后,我们将待删除节点的前一个节点的指针指向待删除节点的后一个节点,这样就删除了待删除节点。
cur->next = cur->next->next;
测试代码
下面是一个简单的测试程序,它创建了一个链表,然后在给定位置上删除一个节点。
int main() {
Node* head = new Node(1); // 创建链表
head->next = new Node(2);
head->next->next = new Node(3);
head->next->next->next = new Node(4);
head->next->next->next->next = new Node(5);
int index = 2; // 待删除节点的位置
head = deleteNode(head, index);
Node* cur = head;
while (cur != NULL) {
cout << cur->data;
cur = cur->next;
}
return 0;
}
这个测试程序将显示以下结果:
1 2 4 5
结论
本文介绍了如何在给定位置上删除链表节点的C++程序实现。需要注意的是,删除链表节点时需要分为两种情况:删除头结点和删除中间节点或尾节点。在删除中间节点或尾节点时,需要使用循环找到待删除节点的前一个节点。