请使用c语言给出单链表的删除(按值删除和按位置删除)的完整代码
时间: 2024-09-30 19:05:19 浏览: 11
在C语言中,我们可以使用结构体和指针来实现单链表的操作。这里提供按值删除和按位置删除的示例代码:
首先,我们定义一个链表节点结构体:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
**按值删除(查找并删除特定值):**
```c
Node* delete_by_value(Node* head, int value) {
if (head == NULL)
return head;
Node* current = head;
Node* prev = NULL;
while (current != NULL && current->data != value) {
prev = current;
current = current->next;
}
if (current == NULL) // 没有找到要删除的元素
return head;
if (prev == NULL) // 链表头结点
head = current->next;
else
prev->next = current->next;
free(current); // 释放内存
return head;
}
```
**按位置删除(给定索引删除节点):**
```c
Node* delete_by_index(Node* head, unsigned int index) {
if (head == NULL || index >= sizeof(head->data))
return head;
Node* current = head;
for (unsigned int i = 0; i < index && current != NULL; i++)
current = current->next;
if (current == NULL)
return head;
if (index == 0) { // 删除头结点
Node* temp = head->next;
free(head);
head = temp;
} else {
Node* prev = current->prev;
prev->next = current->next;
}
free(current); // 释放内存
return head;
}
```
注意:以上代码假设`sizeof(head->data)`可以代表链表节点间的平均间隔,如果节点大小不是固定的,需要稍作修改。