20:22 第2章-线性表-链表算法 1.简答题 设计一个算法,删除带头结点的单链表L中第个结点,同时释放被删结点的空间,成功操作返回true,否则返回false。 (须定义单链表结 点类型)
时间: 2024-09-25 16:03:01 浏览: 44
在单链表中删除第`n`个节点并释放其空间,可以采用迭代或递归的方式实现。这里我们给出一种基于迭代的方法:
1. 首先定义一个单链表节点结构体,包含指针域next和数据域data。
```c
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
```
2. 定义函数deleteNode,传入头结点指针head和需要删除的节点索引n。
```c
bool deleteNode(ListNode** head, int n) {
// 如果链表为空或者要删除的是第一个节点
if (!(*head) || n == 0) {
ListNode* temp = *head;
*head = (*head)->next;
free(temp); // 释放头节点
return true;
}
// 指针初始化
ListNode* current = *head;
ListNode* previous = NULL;
int index = 1;
// 找到第n个节点,但不包括它
while (index < n && current != NULL) {
previous = current;
current = current->next;
index++;
}
// 如果找到了第n个节点,删除它
if (current != NULL) {
previous->next = current->next; // 跳过第n个节点
free(current); // 释放第n个节点
return true;
} else {
return false; // 未找到第n个节点,操作失败
}
}
```
阅读全文