1、已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结 点,请写出删除P结点的算法。
时间: 2023-09-22 17:07:35 浏览: 126
实现在单链表中删去值相同的多余结点的算法.txt
删除P结点的算法步骤如下:
1. 判断链表是否为空,如果为空则直接返回。
2. 遍历链表,找到P结点的前一个结点pre和后一个结点next。
3. 将pre的next指向next,将P结点删除。
4. 释放P结点的内存空间。
算法实现代码如下:
```
void deleteNode(Node* L, Node* P) {
if (L == NULL || P == NULL || L->next == NULL) {
return;
}
Node* pre = L;
Node* cur = L->next;
while (cur != NULL) {
if (cur == P) {
pre->next = cur->next;
free(cur);
break;
}
pre = cur;
cur = cur->next;
}
}
```
其中,L为链表的头结点,P为要删除的结点。注意,这里假设链表有头结点,如果没有头结点,则需要分别考虑删除首元结点和尾元结点的情况。
阅读全文