删除不附设头指针的单链表
时间: 2024-05-07 21:22:28 浏览: 40
要删除不附设头指针的单链表,需要先找到链表的尾节点,然后从尾节点开始逐个删除节点直到链表为空。
具体的实现如下:
```c
struct ListNode {
int val;
struct ListNode *next;
};
void deleteList(struct ListNode *tail) {
if (tail == NULL) {
return;
}
struct ListNode *prev = tail;
struct ListNode *curr = tail->next;
while (curr != tail) {
prev->next = NULL;
free(prev);
prev = curr;
curr = curr->next;
}
free(prev);
}
```
这个函数接受链表的尾节点作为参数,然后逐个删除每个节点。由于没有头指针,我们需要使用尾节点来遍历整个链表。
首先,我们将 `prev` 指向 `tail`,将 `curr` 指向 `tail->next`。然后,我们逐个删除节点,直到 `curr` 指向 `tail`。在每一次循环中,我们将 `prev` 指向当前节点,将 `curr` 指向下一个节点。然后,我们将 `prev` 的 `next` 指针设置为 `NULL`,并释放 `prev` 节点的内存。最后,我们将 `prev` 指向 `curr`,将 `curr` 指向下一个节点。当循环结束时,我们将 `prev` 指向的节点删除,完成整个链表的删除操作。
注意,在删除每个节点之后,我们需要将 `prev` 指向当前节点,而不是下一个节点。这是因为我们需要在删除当前节点之后,将 `prev` 指向下一个节点。如果我们在删除节点之后将 `prev` 指向下一个节点,那么我们将会跳过一个节点,导致链表删除不完整。
阅读全文