酷代码 AI
菜单
服务商

要求实现函数,在带头结点的单链表中删除数据域值为x的第一个结点。若不存在值为x的结点,则不进行删除操作。 函数接口定义: void Delete(Node* head, int x);

以下是实现 `Delete` 函数的代码: ```c #include <stdio.h> #include <stdlib.h> // 定义单链表节点结构 typedef struct Node { int data; struct Node* next; } Node; // 在带头结点的单链表中删除数据域值为x的第一个结点 void Delete(Node* head, int x) { Node* prev = head; Node* curr = head->next; // 遍历链表,查找值为x的第一个结点 while (curr != NULL) { if (curr->data == x) { // 找到值为x的结点,进行删除操作 prev->next = curr->next; free(curr); return; } // 移动指针 prev = curr; curr = curr->next; } } // 创建新节点 Node* createNode(int data) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = data; newNode->next = NULL; return newNode; } // 打印链表 void printList(Node* head) { Node* curr = head->next; while (curr != NULL) { printf("%d ", curr->data); curr = curr->next; } printf("\n"); } int main() { // 创建头结点 Node* head = createNode(0); // 插入一些节点 head->next = createNode(1); head->next->next = createNode(2); head->next->next->next = createNode(3); head->next->next->next->next = createNode(2); printf("Before deletion: "); printList(head); // 删除值为2的第一个结点 Delete(head, 2); printf("After deletion: "); printList(head); return 0; } ``` 代码说明: 1. 单链表节点结构:定义了 `Node` 结构体,包含一个整数 `data` 和一个指向下一个节点的指针 `next`。 2. Delete 函数: - 使用两个指针 `prev` 和 `curr` 分别指向当前节点的前一个节点和当前节点。 - 遍历链表,当 `curr` 节点的数据域值等于 `x` 时,将 `prev` 的 `next` 指针指向 `curr` 的下一个节点,并释放 `curr` 节点的内存。 - 如果遍历完整个链表都没有找到值为 `x` 的节点,则不进行删除操作。 3. createNode 函数:用于创建一个新的节点,并初始化其数据域和指针域。 4. printList 函数:用于打印链表中的所有节点的数据域值。 5. main 函数:创建一个带头结点的单链表,并插入一些节点。调用 `Delete` 函数删除值为 2 的第一个节点,然后打印删除前后的链表。 复杂度分析: - 时间复杂度:$O(n)$,其中 $n$ 是链表的长度。需要遍历链表一次来查找值为 `x` 的节点。 - 空间复杂度:$O(1)$,只使用了常数级的额外空间。 [2025-12-23 10:25:57 | AI问答 | 764点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多