链表删除
时间: 2023-07-10 09:13:51 浏览: 44
链表删除操作包括删除指定节点和删除整个链表两种情况。
1. 删除指定节点:
首先,需要遍历链表找到要删除的节点,并记录其前驱节点。然后,将前驱节点的 `next` 指针指向要删除节点的后继节点,最后释放要删除节点的内存空间即可。
下面是一个示例代码:
```c
void deleteNode(struct ListNode* head, int val) {
struct ListNode *p = head, *prev = NULL;
while (p != NULL && p->val != val) {
prev = p;
p = p->next;
}
if (p != NULL) {
// 删除p节点
if (prev == NULL) {
head = p->next;
} else {
prev->next = p->next;
}
free(p);
}
}
```
2. 删除整个链表:
遍历链表,依次释放每个节点的内存空间即可。需要注意的是,在释放节点之前需要先保存下一个节点的指针,以便在释放当前节点后仍然能够访问下一个节点。
下面是一个示例代码:
```c
void deleteList(struct ListNode* head) {
struct ListNode *p = head, *next;
while (p != NULL) {
next = p->next;
free(p);
p = next;
}
head = NULL;
}
```