删除静态链表
时间: 2023-07-10 18:15:10 浏览: 57
要删除静态链表中的一个节点,需要先找到要删除节点的前驱节点,然后将前驱节点的指针指向要删除节点的后继节点。具体操作步骤如下:
1. 遍历静态链表,找到要删除节点的前驱节点和后继节点。
2. 将前驱节点的指针指向后继节点,即跳过要删除的节点。
3. 如果要删除的节点是静态链表的第一个节点,则需要将头指针指向后继节点。
4. 释放要删除节点的空间。
下面是一个示例代码:
```
void deleteNode(int nodeIndex) {
if (nodeIndex < 1 || nodeIndex > MAX_SIZE) {
// 节点索引无效
return;
}
// 找到要删除节点的前驱节点和后继节点
int preIndex = 0;
int curIndex = 1;
while (curIndex != nodeIndex && curIndex != 0) {
preIndex = curIndex;
curIndex = staticList[curIndex].next;
}
if (curIndex == 0) {
// 节点不存在
return;
}
// 将前驱节点的指针指向后继节点
staticList[preIndex].next = staticList[nodeIndex].next;
if (nodeIndex == 1) {
// 要删除的节点是第一个节点,需要更新头指针
headIndex = staticList[headIndex].next;
}
// 释放要删除节点的空间
staticList[nodeIndex].next = 0;
staticList[nodeIndex].data = 0;
freeIndexList.push(nodeIndex);
}
```
其中,`staticList` 是静态链表的数组,`MAX_SIZE` 是静态链表的最大长度,`headIndex` 是头指针的索引,`freeIndexList` 是空闲节点的索引列表。在代码中,我们通过遍历找到要删除节点的前驱节点和后继节点,并将前驱节点的指针指向后继节点,最后释放要删除节点的空间。注意,如果要删除的节点是第一个节点,需要更新头指针。