用 C 语音设计一个算法,删除带头结点的单链表L中第 i 个结点,同时释放被删结点的空间,成功操作返回true,否则返回false。(须定义单链表结点类型)
时间: 2024-09-25 12:03:31 浏览: 34
试写出一个计算单链表中结点个数的算法,其中指针p指向该链表的第一个结点。
在C语言中,我们可以设计一个简单的算法来删除单链表L中的第i个节点。首先,我们需要定义一个单链表结构体(Node),包含数据域(data)和指向下一个节点的指针(next)。这里假设头结点已存在,并且0 <= i < 链表长度。
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
// 删除第i个节点的函数
bool deleteNode(Node** head, int i) {
if (*head == NULL || i <= 0) {
// 如果链表为空或i无效,直接返回false
return false;
}
Node* current = *head;
Node* previous = NULL;
// 遍历到第i个节点前
for (int j = 0; j < i - 1 && current != NULL; j++) {
previous = current;
current = current->next;
}
if (current == NULL) { // 如果没找到i个节点,说明越界了
return false;
}
// 将当前节点的值传递给前一个节点的next
if (previous == NULL) { // 如果是头节点
*head = current->next;
} else {
previous->next = current->next;
}
// 释放当前节点内存
free(current);
return true; // 成功删除,返回true
}
阅读全文