简单c语言初学者写算法,用带头结点的单链表表示链串,每个结点存放一个字符。设计一个算法,将链串s中所有值为x的字符删除。要求算法的时间复杂度均为O(n)、空间复杂度为O(1)。
时间: 2024-11-12 15:32:52 浏览: 18
【精品课件】数据结构与算法 数据结构与C语言 data structure课程 第2章 线性表(共172页).ppt
在C语言中,为了实现这个需求,可以创建一个遍历链表的函数,该函数会检查当前节点的值是否等于目标字符x。如果是,就跳过该节点并继续到下一个节点;如果不是,就将其连接到结果链表上。这里我们假设输入链表的头节点不为空。
```c
typedef struct Node {
char data;
struct Node* next;
} Node;
void deleteChar(Node** head, char x) {
if (*head == NULL) return; // 链表为空的情况
Node* current = *head;
Node* prev = NULL;
while (current != NULL) {
if (current->data == x) { // 如果当前节点的数据等于x
if (prev == NULL) { // 如果是第一个节点
*head = current->next;
} else {
prev->next = current->next;
}
free(current); // 释放当前节点内存
current = current->next; // 跳过已删除节点
} else {
prev = current; // 当前不是x,更新prev指向前一个节点
current = current->next;
}
}
}
```
阅读全文