用c语言实现:4. ListDelete(Node *head, unsigned int index, DataType* e):删除链表给定位置的元素,将删除节点的值返回给e
时间: 2024-09-17 18:09:30 浏览: 146
在C语言中,实现`ListDelete`函数可以按照以下步骤进行,该函数会从链表中删除指定索引处的节点,并将被删除节点的值存储到用户提供的指针`e`中。假设链表节点包含一个数据域`data`。
```c
DataType ListDelete(Node **head, unsigned int index, DataType *e) {
if (*head == NULL || index > 0 && index >= (unsigned int)(*head)->size) { // 检查链表是否为空或索引越界
return NULL; // 如果条件满足,返回NULL表示无法删除
}
Node *current = *head;
Node *previous = NULL;
for (unsigned int i = 0; i < index; ++i) { // 遍历找到目标节点前一个节点
previous = current;
current = current->next;
}
if (current == NULL) { // 到达了链表尾部,没有找到目标节点
return NULL;
}
*e = current->data; // 将节点值复制到用户提供的e指针中
DataType deletedValue = current->data; // 保留被删除的值
// 删除节点
previous->next = current->next;
free(current); // 释放当前节点的内存
return deletedValue;
}
```
这个函数首先检查链表和索引的有效性,然后通过循环找到待删除节点的前一个节点。接着,它将待删除节点的值赋给`e`,并将节点从链表中移除并释放其内存。
阅读全文